我的问题与这个问题基本相同:
Polymorphic Association with multiple associations on the same model
但是,如稍后的评论者所示,提议/接受的解决方案不起作用。
我有一个在我的应用程序中使用的 Photo 类。一个帖子可以有一张照片。但是,我想重新使用多态关系来添加次要照片。
前:
class Photo
belongs_to :attachable, :polymorphic => true
end
class Post
has_one :photo, :as => :attachable, :dependent => :destroy
end
期望:
class Photo
belongs_to :attachable, :polymorphic => true
end
class Post
has_one :photo, :as => :attachable, :dependent => :destroy
has_one :secondary_photo, :as => :attachable, :dependent => :destroy
end
但是,这失败了,因为它找不到“SecondaryPhoto”类。根据我从其他线程中可以得知的信息,我想做:
has_one :secondary_photo, :as => :attachable, :class_name => "Photo", :dependent => :destroy
除了调用 Post#secondary_photo 简单地返回通过照片关联附加的相同照片,例如发布#照片 === 发布#secondary_photo。查看 SQL,它确实 WHERE type = "Photo"而不是我想要的 "SecondaryPhoto"...
想法?谢谢!
最佳答案
我在我的项目中做到了这一点。
诀窍是照片需要一个列,将在 has_one 条件下使用以区分主要和次要照片。注意这里 :conditions
发生了什么。
has_one :photo, :as => 'attachable',
:conditions => {:photo_type => 'primary_photo'}, :dependent => :destroy
has_one :secondary_photo, :class_name => 'Photo', :as => 'attachable',
:conditions => {:photo_type => 'secondary_photo'}, :dependent => :destroy
这种方法的美妙之处在于,当您使用
@post.build_photo
创建照片时,photo_type 将自动预先填充相应的类型,例如“primary_photo”。 ActiveRecord 足够聪明,可以做到这一点。关于ruby-on-rails - Rails 多态关联在同一模型上具有多个关联,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2494452/