2015-03-02 84 views
0

可以说我有这些模型:过滤多态性belongs_to的关系

class Image < ActiveRecord::Base 
    has_many :attachments, as: :attachable 
end 

class File < ActiveRecord::Base 
    has_many :attachments, as: :attachable 
end 

class Attachment < ActiveRecord::Base 
    belongs_to :attachable, polymorphic: true 

    # How can I add an image relation? 
    belongs_to :image ... 
    belongs_to :file ... 
end 

什么是添加图像/文件关系到附件模型

的最佳途径,这就是我想要达到最终什么:

class Page < ActiveRecord::Base 
    has_many :attachments, as: :attacher 

    # ? 
    has_many :images, 
    has_many :files 
end 

回答

0

也许类似于这个如果我的Imagelink =您的附件,我的图片=您的页面,我的项目=您的图片,我的情景=您的文件(或它已经很长了,我不记得我自己的代码正确)。

class Project 
    has_many :imagelinks, :as => :displayable, :dependent => :destroy 
    has_many :images, :through => :imagelinks 
end 

class Scenario 
    has_many :imagelinks, :as => :displayable, :dependent => :destroy 
    has_many :images, :through => :imagelinks 
end 

class Unittest 
    has_many :imagelinks, :as => :displayable, :dependent => :destroy 
    has_many :images, :through => :imagelinks 
end 

class Imagelink 
    # attributes: id, image_id, displayable_id, displayable_type 
    belongs_to :image 
    belongs_to :displayable, :polymorphic => true 
    belongs_to :project, :class_name => 'Project', :foreign_key => 'displayable_id' 
    belongs_to :scenario, :class_name => 'Scenario', :foreign_key => 'displayable_id' 
    belongs_to :unites, :class_name => 'Unittest', :foreign_key => 'displayable_id' 
end 

class Image 
    has_many :imagelinks, :dependent => :destroy 
    has_many :projects, :through => :imagelinks, :source => :project, :conditions => "imagelinks.displayable_type = 'Project'" 
    has_many :scenarios, :through => :imagelinks, :source => :scenario, :conditions => "imagelinks.displayable_type = 'Scenario'" 
    has_many :unittests, :through => :imagelinks, :source => :unittest, :conditions => "imagelinks.displayable_type = 'Unittest'" 
    has_attached_file :asset, :styles => { blah blah blah } 
end