我在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_type
为Product
的所有照片,作为示例。
Picture.imageable.where(imageable_type: "Product")
有效,但这似乎并不理想。它需要知道类型列中的值。是否有直接指定模型的activerecord方法?例如。像这样的东西:
Picture.imageable.where(imageable: Product)
(其中Product是activerecord模型)
答案 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)