Carrierwave - Как ссылаться на изображение модели из другой модели

У меня есть модель пользователя и модель проекта. Модель User имеет PhotoUploader в качестве загрузчика несущей, а модель Project имеет LogoUploader в качестве загрузчика несущей.

У меня также есть модель плаката, которая ссылается на пользователя или проект. С помощью этого плаката я могу сделать публикацию с пользователем или проектом таким же образом (показывая имя, описание и изображение).

Проблема в том, что я хочу сослаться на фотографию от пользователя или логотип из проекта, используя строковый атрибут, такой как «изображение», который является объектом Uploader из несущей волны.

Я не хочу дублировать изображения.

Как я могу это сделать? Это правильный способ сделать это?


person jphorta    schedule 11.08.2013    source источник
comment
напомните мне дактайпинг.   -  person Viren    schedule 11.08.2013


Ответы (1)


Полиморфная ассоциация — это то, что вам нужно. 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

модели/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

когда вы сохраняете медиафайл для пользователя, вы создаете новую строку мультимедиа:

id   mediable_type   mediable_id    some_other_field
 1       User             1           something here

тогда вы можете позвонить current_user.medias

person rmagnum2002    schedule 11.08.2013
comment
Я мог бы использовать полиморфизм, но мне нужен другой загрузчик несущей для пользователя и для проекта, в этом проблема. Я не могу объединить два загрузчика в одну модель, такую ​​как Media. - person jphorta; 11.08.2013