我有一个用户模型和一个项目模型。User 模型有一个 PhotoUploader 作为载波上传器,Project 模型有一个 LogoUploader 作为载波上传器。
我还有一个引用用户或项目的海报模型。使用此海报,我可以以相同的方式(显示名称、描述和图像)与用户或项目一起发布帖子。
问题是我想引用来自用户的照片或来自项目的徽标,使用像“图像”这样的字符串属性,这是来自carrierwave的上传器对象。
我不想复制图像。
我怎样才能做到这一点?这是正确的方法吗?
我有一个用户模型和一个项目模型。User 模型有一个 PhotoUploader 作为载波上传器,Project 模型有一个 LogoUploader 作为载波上传器。
我还有一个引用用户或项目的海报模型。使用此海报,我可以以相同的方式(显示名称、描述和图像)与用户或项目一起发布帖子。
问题是我想引用来自用户的照片或来自项目的徽标,使用像“图像”这样的字符串属性,这是来自carrierwave的上传器对象。
我不想复制图像。
我怎样才能做到这一点?这是正确的方法吗?
Polymorphic Association is what you need. http://guides.rubyonrails.org/association_basics.html#polymorphic-associations http://railscasts.com/episodes/154-polymorphic-association-revised
models/media.rb
class Media < ActiveRecord::Base
attr_accessible :content
belongs_to :mediable, polymorphic: true
end
models/user.rb
class User < ActiveRecord::Base
attr_accessible :content, :name
has_many :medias, as: :mediable
end
models/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
when you save a media to user, you'll create a new media row:
id mediable_type mediable_id some_other_field
1 User 1 something here
then you can call current_user.medias