Я думаю, это поможет, если вы разместите дамп журнала ошибок.Это немного неоднозначно, что new_record?это относится к.
Я думаю, что проблема связана со следующими строками:
<% @gallery.images.build %>
<%= g.inputs :for => :images, :name => "New Image" do |image| %>
<% if image.new_record? %>
Я вижу два сценария:
1) <% if image.new_record? %>
выдает ошибку, потому что изображение ноль.
2) <%= g.inputs :for => :images, :name => "New Image" do |image| %>
выдает ошибку.#inputs
- это оболочка для конструктора форм рельсов. #fields_for
Метод, который выполняется по-разному, независимо от того, является ли объект новой записью или нет (я думаю, что он включает идентификатор в хэш атрибутов в качестве скрытого значения, если image.new_record?
возвращает true).
В любом случае, это потому, что построитель форм пытается создать форму для нулевого объекта.Вы правильно сделали, пытаясь создать изображение галереи до того, как был вызван #inputs
, но я думаю, что это должно быть еще раньше.Вероятно, он должен быть размещен до того, как форма даже начнет строиться (выше #semantic_form_for
).
Есть два других похожих решения.Вы, вероятно, должны построить галерею в контроллере до того, как форма начнет отображаться.Затем, когда вы запускаете форму для объекта @gallery
, он уже знает, что у него есть встроенное изображение.В качестве альтернативы, я думаю, что это может сработать, если вы укажете
<%= g.inputs :for => @gallery.images, :name => "New Image" do |image| %>
Надеюсь, любой из них сработает, потому что, похоже, проблема в том, что он не обращается к только что созданному образу.