如何获得多态关系的另一面

时间:2012-09-18 01:00:55

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

我有以下内容:

class Item < ActiveRecord::Base
  # assets
  has_many :assets, :as => :assetable, :dependent => :destroy

class Asset < ActiveRecord::Base
  belongs_to :assetable, :polymorphic => true

并希望能够做到:

a=Asset.find(5)
a.item  # no dice

我如何获得以资产开头的相关项目?

THX

2 个答案:

答案 0 :(得分:2)

要获取关联项,您需要使用在Asset类中设置的关系名称。由于您已将此关系声明为:assetable,因此您需要将该项称为“可声明”。

假设您根据Rails guide正确设置了数据库,您应该可以执行以下操作:

a=Asset.find(5)
a.assetable

答案 1 :(得分:1)

当您创建多态模型(在您的情况下为Asset)时,相应的表必须同时具有_id和_type列以引用相关的多态记录。在您的情况下,此资产记录需要具有assetable_id和assetable_type(字符串等于“Item”)。然后,当你调用a.item时,模型知道在“Item”表中查找id为== assetable_id的记录。