Сборка Rails 3 не сохраняется в базу данных (Railscast 196)

Я слежу за railscast 196. У меня два уровня ассоциаций. Приложение -> Форма -> Вопрос. Это новое действие в контроллере формы.

def new
 @app = App.find(params[:app_id])
 @form = Form.new
 3.times {@form.questions.build }
end

представление отображает все 3 вопроса в порядке, и я могу отправить форму ... но ничего не вставляется в базу данных для вопросов. Вот мое действие по созданию

def create
 @app = App.find(params[:app_id])
 @form = @app.forms.create(params[:form])

 respond_to do |format|
   if @form.save
     format.html { redirect_to(:show => session[:current_app], :notice => 'Form was successfully created.') }
     format.xml  { render :xml => @form, :status => :created, :location => @form }
   else
     format.html { render :action => "new" }
     format.xml  { render :xml => @form.errors, :status => :unprocessable_entity }
   end
 end
end

Вот параметры, которые отправляются моему методу создания:

    {"commit"=>"Create Form",
    "authenticity_token"=>"Zue27vqDL8KuNutzdEKfza3pBz6VyyKqvso19dgi3Iw=",
     "utf8"=>"✓",
     "app_id"=>"3",
     "form"=>{"questions_attributes"=>{"0"=>{"content"=>"question 1 text"},
     "1"=>{"content"=>"question 2 text"},
     "2"=>{"content"=>"question 3 text"}},
     "title"=>"title of form"}}`

Это показывает, что параметры отправляются правильно... Я думаю. Модель вопроса имеет только текстовый столбец «контент».

Любая помощь приветствуется :)


person Msencenb    schedule 04.06.2011    source источник


Ответы (2)


Предполагая:

  1. У вас правильно настроена форма,
  2. Ваш сервер показывает, что ваши данные отправляются в новое действие, и
  3. Ваша модель не содержит обратных вызовов, которые блокируют сохранение,

попробуйте изменить:

@form = @app.forms.create(params[:form])

to

@form = @app.forms.build(params[:form])
person sscirrus    schedule 04.06.2011
comment
Хотя это работает при правильной установке внешнего ключа в форму app_id из таблицы форм, вопросы все еще не сохраняются. - person Msencenb; 06.06.2011

Ок разобрался. Оказывается, я должен был смотреть на свою консоль немного больше. Ошибка, из-за которой он зависал при попытке вставить вопросы в базу данных, была «Предупреждение: нельзя массово назначать защищенные атрибуты :questions_attributes». Добавление этого в доступные атрибуты помогло.

class Form < ActiveRecord::Base
    belongs_to :app
    has_many :questions, :dependent => :destroy
    accepts_nested_attributes_for :questions
    attr_accessible :title, :questions_attributes
end
person Msencenb    schedule 05.06.2011