我的问题与这个问题基本相同:
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/

10-15 18:18