如何创建多种类型的has_many关联?

时间:2012-03-05 15:20:47

标签: ruby-on-rails ruby-on-rails-3.1 polymorphic-associations

我有以下内容:

  • 链接模型
  • 一个LinkItem模型,我希望它是以下类型
    • 评论
    • 标签
    • ...

我正在使用此代码:

链接模型

class Link < ActiveRecord::Base  
  has_many :link_items  
end

LinkItem模型

class LinkItem < ActiveRecord::Base
  belongs_to :link
end

class Comment < LinkItem
end

class Tag < LinkItem
end

现在我不知道如何告诉Rails我的LinkItem模型应该是多态的。我已经阅读了关于asociations和其他教程的Rails指南,但这些仅描述了如何为多个其他模型创建belongs_to关联,而不是相反。

所以我的问题是:
如何创建has_many关联,其中关联的实例可以是不同类型的?或者为评论,标签等创建单独的模型并将它们与我的链接模型分别关联起来会更好吗?

修改
实际上我的代码有效 我只是尝试在我的数据库中使用'type'-column(而不是'link_item_type')并且rails自动使用它来保存/确定我的LinkItems的正确子类(感谢Ogz的向导提示)
但是,如果不首先引用LinkItem,我仍然无法访问LinkItem的子类。这是某种延迟加载吗?

4 个答案:

答案 0 :(得分:2)

如果您正在寻找多态关联,nicholaides 有正确的方法。 如果您正在寻找has_meny多态关联,请查看the answer to "Setting up a polymorphic has_many :through relationship"

答案 1 :(得分:0)

这称为多态关联。这是一些documentation

答案 2 :(得分:0)

我刚刚处理了我认为同样的问题。

我的模特的文件名错了。我最初使用一个名称(例如link.tag.rb)创建它,然后在不改变文件名(例如tag.rb)的情况下动态更改类的名称(例如从LinkTag到Tag)。 / p>

当我正确地重命名文件时,它按预期工作。

总之,需要匹配类名称的文件名。

我知道这篇文章有点旧,但也许有一天会帮助别人!

答案 3 :(得分:-1)

我的用户多态关联很多!

我会先看RailsCast,然后documentation建议的nicholaides

它完美地解释了如何创建关联的两面。