Nikolai Weibull
2006-Jun-23 10:32 UTC
[Rails] Describing a "replaces" relationship within the same model
Hi! I would like to describe the relationships between two objects of a model, where one of the objects replaces the other. I want to be able to tell if one object has been replaced and, if so, by what object; and vice versa what object an object replaces, if any. My idea was the following: create_table :events do |t| t.column :replacement_id, :integer t.column :description, :text, :null => false end create_table :replacements, {:id => false} do |t| t.column :original_id, :integer, :null => false t.column :new_id, :integer, :null => false t.column :date, :date, :null => false end Is this a reasonable model and, if so, how should I link Event and Replacement together? My idea for the above was: An Event can belong to a Replacement and a Replacement has an original Event and a new Event. One can thus tell if an Event replaces or is replaced by another Event by looking at what member of a Replacement an Event belongs to, i.e., if it is equal to Replacement#original or Replacement#new. I also want to know the date when the replacement was made. Any suggestions are welcome. nikolai -- Posted via http://www.ruby-forum.com/.
Nikolai Weibull
2006-Jun-23 11:48 UTC
[Rails] Re: Describing a "replaces" relationship within the same mod
Nikolai Weibull wrote:> create_table :replacements, {:id => false} do |t|Hm, I guess doing :id => false here isn''t right, so it should be create_table :replacements do |t| After realizing this the set up becomes the following: create_table :events do |t| t.column :replacement_id, :integer t.column :description, :text, :null => false end create_table :replacements do |t| t.column :original_id, :integer, :null => false t.column :new_id, :integer, :null => false t.column :date, :date, :null => false end And the models will be: class Event < ActiveRecord::Base belongs_to :replacement end class Replacement < ActiveRecord::Base belongs_to :original, :class_name => "Event" :foreign_key => "original_id" belongs_to :new, :class_name => "Event" :foreign_key => "new_id" end Does that seem reasonable? I guess what confused me is that I always seem to read "belongs_to" as "belongs to", which makes sense for Event, instead of "references", which makes sense for Replacement, as is sometimes what you''re trying to achieve. nikolai -- Posted via http://www.ruby-forum.com/.