Я новичок в 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.