Activerecord в rails 3.2 внутри движка выдает NameError: неинициализированная константа при использовании accepts_nested_attributes_for

Я строю двигатель рельсов. У меня есть следующие два класса моделей:

module LandingPageEng
    class LandingPage < ActiveRecord::Base
        attr_protected # just for debugging right now
        has_many :slide_show_images, :dependent => :destroy
        accepts_nested_attributes_for :slide_show_images, allow_destroy: true
    end
end

Второй класс это:

module LandingPageEng
    class SlideShowImage < ActiveRecord::Base
        attr_accessible :image, :landing_page_id
        belongs_to :landing_page 

        validates :image, :presence => true
    end
end

Связанные с ними таблицы — landing_page_eng_landing_page и landing_page_eng_slide_show_image.

Когда я запускаю в консоли следующее, я получаю сообщение об ошибке NameError: неинициализированная константа SlideShowImage.

1.9.3-p194 :001 > LandingPageEng::LandingPage.new({"title"=>"wd", "tagline"=>"wed",     "slide_show_images"=>{"_destroy"=>""}})
NameError: uninitialized constant SlideShowImage
    from /Users/martinjlogan/.rvm/gems/ruby-1.9.3-p194/gems/activesupport-  3.2.6/lib/active_support/inflector/methods.rb:229:in `block in constantize'
    from /Users/martinjlogan/.rvm/gems/ruby-1.9.3-p194/gems/activesupport-3.2.6/lib/active_support/inflector/methods.rb:228:in `each'
    from /Users/martinjlogan/.rvm/gems/ruby-1.9.3-p194/gems/activesupport-3.2.6/lib/active_support/inflector/methods.rb:228:in `constantize'
    from /Users/martinjlogan/.rvm/gems/ruby-1.9.3-p194/gems/activesupport-3.2.6/lib/active_support/core_ext/string/inflections.rb:54:in `constantize'
<snip>

Я ломаю голову над этим и не могу понять. Любая помощь высоко ценится.


person Martin Logan    schedule 13.06.2012    source источник


Ответы (1)


У меня нет установки Rails 3 с движками для быстрого тестирования, но я думаю, что проблема в вашей конфигурации has_many; он ищет класс с именем SlideShowImage, но имя вашего класса LandingPageEng::SlideShowImage.

Я считаю, что добавление опции :class_name к вашему has_many исправит это.

http://railsapi.com/doc/rails-v3.0.8rc1/classes/ActiveRecord/Associations/ClassMethods.html#M004956

person Ryan Briones    schedule 13.06.2012
comment
Спасибо за помощь Райану. Теперь я получаю что-то довольно странное. Кажется, теперь ожидается класс, который я указываю с помощью :class_name, и вместо этого находит массив ?? ActiveRecord::AssociationTypeMismatch: LandingPageEng::SlideShowImage(#70200876366100) expected, got Array(#70200871589540) - person Martin Logan; 14.06.2012
comment
Похоже, проблема с передаваемыми параметрами. Вместо того, чтобы передавать slide_show_image_attributes в качестве ключа, он просто передает slide_show_images из формы. Этот же код отлично работал вне движка. Хотя это прогресс. Спасибо. - person Martin Logan; 14.06.2012
comment
Похоже на проблему, когда несколько переменных изменились одновременно. Не знаю, что я сделал. Теперь все работает, ваше решение было правильным. Спасибо - person Martin Logan; 14.06.2012