habtm 多次使用相同的模型

Posted

技术标签:

【中文标题】habtm 多次使用相同的模型【英文标题】:habtm multiple times with the same model 【发布时间】:2010-05-10 16:32:56 【问题描述】:

我正在尝试为出版物建模。一个出版物可以有多个作者和编辑。由于一个人可能是一个出版物的作者和另一个出版物的编辑,因此没有单独的作者和编辑模型:

class Publication < ActiveRecord::Base
  has_and_belongs_to_many :authors, :class_name=>'Person'
  has_and_belongs_to_many :editors, :class_name=>'Person'
end

上面的代码不起作用,因为它使用了相同的连接表。现在我可以指定连接表的名称,但是 API 文档中有一个警告是关于我不理解的警告:

:join_table: 如果默认基于词法顺序,则指定连接表的名称 不是你想要的。警告:如果 您正在覆盖的表名 任一类,table_name 方法 必须在任何下方声明 has_and_belongs_to_many 声明 为了工作。

【问题讨论】:

【参考方案1】:

表示如果类 Publication 链接到一个没有标准名称的表,例如“my_publications”:

class Publication < ActiveRecord::Base
  set_table_name "my_publication"
end 

设置的表名应该放在 habtm 声明的后面才能工作:

class Publication < ActiveRecord::Base
  has_and_belongs_to_many :authors, :class_name=>'Person'
  has_and_belongs_to_many :editors, :class_name=>'Person'
  set_table_name "my_publication"
end

【讨论】:

【参考方案2】:

我通常认为这是您想要使用 has_many :through 的情况。

【讨论】:

以上是关于habtm 多次使用相同的模型的主要内容,如果未能解决你的问题,请参考以下文章

在rails中相同模型的新视图中附加表单部分

NHibernate 多对一多次获取相同的项目

使用 HABTM 关系保存帖子标签

cakephp分页多个habtm

HABTM 多态关系

最佳实践:多次使用相同的着色器