나는 트랙이있다 has_many
퀴즈와 퀴즈 has_many
질문.중첩 된 리소스를 만들지 않기를 accepts_nested_attributes_?
quiz.rb :
class Quiz < ActiveRecord::Base
belongs_to :track
has_many :questions, dependent: :destroy
accepts_nested_attributes_for :questions
end
question.rb :
class Question < ActiveRecord::Base
belongs_to :quiz
end
quizzes_controller.rb :에
def new
@quiz = Quiz.new
@track = Track.find(params[:permalink])
@course = Course.find(@track.course_id)
3.times { @quiz.questions.build }
end
def create
@track = Track.find(params[:permalink])
@quiz = @track.quizzes.build(quiz_params)
@course = Course.find(@track.course_id)
if @quiz.save
flash[:success] = 'Quiz successfully created'
redirect_to quiz_path @quiz
else
redirect_to track_path @track
end
end
private
def quiz_params
params.require(:quiz).permit(:name, :information, :order,
:permalink, :user_id,
questions_attributes: [:id, :content])
end
PARAMS 제출
{"utf8"=>"✓",
"authenticity_token"=>"...",
"quiz"=> {
"name"=>"Test Quiz",
"questions_attributes"=> {
"0"=>{"content"=>"This is question 1?"},
"1"=>{"content"=>"This is question 2?"},
"2"=>{"content"=>""}
}, "user_id"=>"1",
"order"=>"3"
}, "commit"=>"Submit",
"permalink"=>"1-basics"}
제출을 누르면 퀴즈가 생성되지만 질문은 생성되지 않습니다.
새로운 PARAMS는 : content
이 (요청 매개 변수를 고려) 비어있는 경우
reject_if: proc { |q| q['name'].blank? }
당신은 아마 인스턴스를 거부한다 :
def quiz_params
params.require(:quiz).permit(:name, :information, :order,
:permalink, :user_id,
questions_attributes: [:id, :content, :_destroy, answers_attributes: [:id, :content, :_destroy]])
end
제거하면 오류가 계속 발생하지 않고 추가되기 전에 오류가 발생했습니다. – Tim
당신의 문제가 빈 이름으로 된 질문을 거절 한 것 같아요. question_attributes : [: id, : content]에 이름을 허용하지 않고 인스턴스가 거부되었습니다. (Tested Rails 4.0.2) . – markets