按类型选择多态外键

时间:2018-02-02 21:40:44

标签: ruby-on-rails activerecord

我在http://guides.rubyonrails.org/association_basics.html#polymorphic-associations

的模型中有一个简单的多态关联
class Picture < ApplicationRecord
  belongs_to :imageable, polymorphic: true
end

class Employee < ApplicationRecord
  has_many :pictures, as: :imageable
end

class Product < ApplicationRecord
  has_many :pictures, as: :imageable
end

我想要的是抓取imageable_typeProduct的所有照片,作为示例。

Picture.imageable.where(imageable_type: "Product")有效,但这似乎并不理想。它需要知道类型列中的值。是否有直接指定模型的activerecord方法?例如。像这样的东西:

Picture.imageable.where(imageable: Product)(其中Product是activerecord模型)

1 个答案:

答案 0 :(得分:1)

如果您打算使用Product代替"Product",以便可以捕获代码问题或拼写错误,那么您只需执行以下操作即可

Picture.where(imageable_type: Product.to_s)
# will run fine

Picture.where(imageable_type: Produkt.to_s)
# will raise an error as it is a typo

顺便说一句,我不认为我得到你说的话

  

需要知道类型列

中的值

因为您所需的.where(imageable: Product)仍需要提供的值

琐事

Picture.where(imageable: Product)

...已经实现了,但你不应该像那样使用它,而是改为:

product1 = Product.first
product1_pictures = Picture.where(imageable: product1)

或者

employee1 = Employee.first
employee1_pictures = Picture.where(imageable: employee1)