多态关联混淆,通过关联获得资源

时间:2012-02-13 12:28:22

标签: ruby-on-rails ruby-on-rails-3 model polymorphic-associations

我可能会完全感到困惑,而且目标不合适。

我有一个事件模型,其中包含了属于事件的时间轴。时间轴has_many属于时间轴的TimelineItems。

def Event
  has_one :timeline
end

def Timeline
  belongs_to :event
  has_many :timeline_items
end

def TimelineItem
  belongs_to :timeline
end

create_table :admin_timeline_items do |t|
  t.references :admin_timeline
  t.references :user
  t.references :resource, :polymorphic => true
  t.string :method
end

因此,通过TimelineItem对象,我将能够生成例如此输出:

  

eml在[日期]

创建了帖子“嗨,这是来自eml”

标题“嗨,这是来自eml”将来自Post对象的.title。所以,例如。此TimelineItem具有这些设置

item.user = User.where(:username => "eml")
item.resource_type = "Post"
item.resource_id = 1
item.created_at = 27/082...13:37

所以问题是获取所述Post对象,或者更确切地说是这个特定关联的正确语法。对我来说似乎非常简单,但我找不到正确编写它所需的信息。

感谢您的帮助&时间。

1 个答案:

答案 0 :(得分:0)

抱歉......我只是在困惑自己因为我在自己的测试项目中将resource_id设置为错误的值。我的第一个猜测是正确的。这很简单:

class TimelineItem < ActiveRecord::Base
  belongs_to :timeline
  belongs_to :user
  belongs_to :resource, :polymorphic => true
end

像这样访问资源:

TimelineItem.first.resource
=> Post(....)