Невозможно встроить несколько изображений в монгоид с несущей с полиморфной моделью изображения

У меня возникают трудности с использованием несущей волны вместе с mongoid. Я пишу приложение, которое требует, чтобы изображения хранились в нескольких коллекциях, поэтому я создал класс Image следующим образом (извините за использование imageable):

class Image
  include Mongoid::Document

  embedded_in :imageable, polymorphic: true

  mount_uploader :file, ImageUploader
end

ImageUploader создан rails generate uploader Image.

Тогда у меня есть модель истории:

class Story
  include Mongoid::Document
  include Mongoid::Timestamps

  field :title, :type => String
  field :content, :type => String
  field :category, :type => String

  embeds_many :blog_images, as: :imageable
end

Когда я пытаюсь создать объект Story, я получаю сообщение об ошибке uninitialized constant BlogImage, даже если я не добавляю изображение через форму. Я также пытался в консоли вызвать story.blog_images << Image.new с той же ошибкой.

В моем файле gem у меня есть:

gem 'carrierwave'
gem 'carrierwave-mongoid', :require => 'carrierwave/mongoid'

Мои версии Mongoid - 2.4.7 и Carrierwave - 0.6.2.

Мой главный вопрос заключается в том, как исправить эту ошибку, но я также не слишком уверен в том, как настроить форму для получения этих изображений. (В идеале я хотел бы использовать javascript для добавления нового диалогового окна каждый раз, когда выбирается файл.) Что-то не так с тем, как я настроил свои модели или использую несущую волну?


person Baruch    schedule 30.05.2012    source источник


Ответы (1)


Вам нужно будет указать целевой класс для blog_images, поскольку он не может быть получен из имени отношения. Пытаться:

embeds_many :blog_images, as: :imageable, :class_name => 'Image'
person Steve    schedule 30.05.2012
comment
Это решило проблему, которую я описал. Кроме того, я хотел бы отметить, что строка должна читаться как embeds_many :blog_images, as: :imageable, :class_name => 'Image', cascade_callbacks: true из-за этой проблемы - person Baruch; 31.05.2012