问题描述:

I have the following scenario and I'm not sure if I should use Class Inheritance or Single Table Inheritance:

Class User

has_one :main_list

has_one :known_list

has_many :regular_lists

end

Class List

has_many :words

end

Class Word

belongs_to :list

end

What I would like to do is have each different list type be a different class, the problem is that if I do that, I would need to add main_list_id, known_list_id, and regular_list_id to the Word object/class. This seems cumbersome. Can I do something like:

Class MainList

has_many :words, :foreign_key => list_id

end

and then something like:

@user.main_list.find_by_name("MainList") ?

The only problem with this is that someone could name a RegularList "MainList".

网友答案:

You could do something like this:

Class User < ActiveRecord::Base
   has_many :lists
end

Class List < ActiveRecord::Base
  belongs_to :user
  has_and_belongs_to_many :words
end

Class Word < ActiveRecord::Base
  has_and_belongs_to_many :lists
end

On the list class you could add two boolean fields to list; one for main_list and the other for known_list. On that class you could also add validations to make sure that each user only has one main list and one known list. To select the main list for a user you could do:

@user.lists.find(:first, :conditions => {:main_list => true})
相关阅读:
Top