Подтвердить что ты не робот

Параметры Unpermitted для двойных вложенных моделей в Rails 4

Я новичок в Rails и создал что-то на этом основании, но для его совместимости с сильными параметрами Rails 4 необходимы небольшие обновления:

http://railscasts.com/episodes/196-nested-model-form-part-1

Я выбрал параметры для опроса, вопросов и ответов на основе аналогичного сообщения здесь:

Rails 4 Вложенные атрибуты Неперечисленные параметры

class Survey < ActiveRecord::Base
  has_many :questions, :dependent => :destroy
  accepts_nested_attributes_for :questions, allow_destroy: true
end

class Question < ActiveRecord::Base
  belongs_to :survey
  has_many :answers, :dependent => :destroy
  accepts_nested_attributes_for :answers, allow_destroy: true
end

class Answer < ActiveRecord::Base
  belongs_to :question
end

class SurveysController < ApplicationController
  def survey_params
    params.require(:survey).permit(:name, questions_attributes: [:id, :survey_id, :content])
  end

class QuestionsController < ApplicationController
  def question_params
    params.require(:question).permit(:survey_id, :content, answers_attributes: [:id, :question_id, :content])
  end

class AnswersController < ApplicationController
  def answer_params
    params.require(:answer).permit(:question_id, :content)
  end

Первая вложенная модель (Вопрос) работает, но вторая (Ответ) возвращает ошибку при отправке основной формы опроса:

Неперечисленные параметры: answers_attributes

Started POST "/surveys" for 127.0.0.1 at 2013-07-10 19:20:00 +0800
Processing by SurveysController#create as HTML
Parameters: {"utf8"=>"✓", "authenticity_token"=>"pCK7j73kJPmld6gMXtbnBcheHU3pb9FGdjbHJPX6leE=", "survey"=>{"name"=>"test", "questions_attributes"=>{"0"=>{"content"=>"bbb", "answers_attributes"=>{"0"=>{"content"=>"bbbb"}}}}}, "commit"=>"Create Survey"}
Unpermitted parameters: answers_attributes

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

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

Любые указатели оценили. Кажется, я не могу найти какие-либо двойные вложенные примеры.

ОБНОВЛЕНИЕ: я исправил проблему путем проб и ошибок.

Я выяснил, что исправление заключается в том, что белый список должен соответствовать вложенности атрибутов. Поэтому, чтобы исправить это, я изменил это:

class SurveysController < ApplicationController
  def survey_params
    params.require(:survey).permit(:name, questions_attributes: [:id, :survey_id,    :content])
  end

:

class SurveysController < ApplicationController
  def survey_params
    params.require(:survey).permit(:name, questions_attributes: [:id, :survey_id,    :content, answers_attributes: [:id, :question_id, :content]])
  end

например. просто скопируйте белый список атрибутов answer_attributes и вставьте его внутрь перед закрытием "]" для параметров question_attributes.

4b9b3361

Ответ 1

Я выяснил, что исправление заключается в том, что белый список должен соответствовать вложенности атрибутов. Поэтому, чтобы исправить это, я изменил это:

class SurveysController < ApplicationController
  def survey_params
    params.require(:survey).permit(:name, questions_attributes: [:id, :survey_id,    :content])
  end

:

class SurveysController < ApplicationController
  def survey_params
    params.require(:survey).permit(:name, questions_attributes: [:id, :survey_id,    :content, answers_attributes: [:id, :question_id, :content]])
  end

например. просто скопируйте белый список атрибутов answer_attributes и вставьте его внутрь перед закрытием "]" для параметров question_attributes.

Надеюсь, это поможет другим с той же проблемой.