1

我有以下场景,我不确定是否应该使用类继承或单表继承:

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

我想做的是让每个不同的列表类型成为不同的类,问题是如果我这样做,我需要将main_list_id, known_list_id, 和添加regular_list_idWord对象/类中。这似乎很麻烦。我可以做类似的事情:

Class MainList
  has_many :words, :foreign_key => list_id
end

然后是这样的:

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

唯一的问题是有人可以命名一个RegularList“MainList”。

4

1 回答 1

1

你可以这样做:

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

在列表类中,您可以添加两个布尔字段到列表;一个用于 main_list,另一个用于 known_list。在该类上,您还可以添加验证以确保每个用户只有一个主列表和一个已知列表。要为用户选择主列表,您可以执行以下操作:

@user.lists.find(:first, :conditions => {:main_list => true})
于 2010-11-13T23:29:37.607 回答