Carrierwave - 如何从不同的模型中引用模型的图像

时间:2013-08-11 03:06:57

标签: ruby-on-rails ruby ruby-on-rails-3 paperclip carrierwave

我有一个用户模型和一个项目模型。 User模型有一个PhotoUploader作为载波上传器,Project模型有一个LogoUploader作为载波上传器。

我还有一个引用用户或项目的Poster模型。通过这个海报,我可以用相同的方式发布一个用户或项目的帖子(显示名称,描述和图像)。

问题在于我想使用像“image”这样的字符串属性来引用用户或项目中的徽标,这是来自carrierwave的上传者对象。

我不想复制图片。

我该怎么做?这是正确的方法吗?

1 个答案:

答案 0 :(得分:0)

多态协会是您所需要的。 http://guides.rubyonrails.org/association_basics.html#polymorphic-associations http://railscasts.com/episodes/154-polymorphic-association-revised

<强>模型/ media.rb

class Media < ActiveRecord::Base
  attr_accessible :content
  belongs_to :mediable, polymorphic: true
end

<强>模型/ user.rb

class User < ActiveRecord::Base
  attr_accessible :content, :name
  has_many :medias, as: :mediable
end

<强>模型/ project.rb

class Project < ActiveRecord::Base
  attr_accessible :content, :name
  has_many :medias, as: :mediable
end

<强>的routes.rb

resources :users do
  resources :medias
end

resources :projects do
  resources :medias
end

将媒体保存到用户时,您将创建一个新的媒体行:

id   mediable_type   mediable_id    some_other_field
 1       User             1           something here

然后你可以拨打current_user.medias