Rails中的类继承或单表继承2.3

时间:2010-11-13 23:11:29

标签: ruby-on-rails 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

我想要做的是让每个不同的列表类型都是不同的类,问题是如果我这样做,我需要添加main_list_idknown_list_id和{{1到regular_list_id对象/类。这看起来很麻烦。我可以这样做:

Word

然后像:

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

唯一的问题是有人可以命名@user.main_list.find_by_name("MainList")“MainList”。

1 个答案:

答案 0 :(得分: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})