Rails 3 - сборка без сохранения в базу данных (Railscast 196) - PullRequest
0 голосов
/ 04 июня 2011

Я слежу за 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"}}`

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

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

Ответы [ 2 ]

0 голосов
/ 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
0 голосов
/ 04 июня 2011

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

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

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

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

на

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