我的表格:
.row
.col-lg-6
= form_tag my_quizzes_path do
- @questions.each do |question|
= fields_for @my_quiz do |p|
.field
%p= question.title
= p.label :answer
= radio_button_tag "my_quiz[#{question.id}][answer]", '0'
= radio_button_tag "my_quiz[#{question.id}][answer]", '1'
= hidden_field_tag "my_quiz[#{question.id}][question_id]", question.id
= hidden_field_tag "my_quiz[#{question.id}][user_id]", current_user.id
.actions
= submit_tag
生成这个:
{"utf8"=>"✓",
"authenticity_token"=>"gJYhNisJDuLkfgm3rmy5VBJZ2koMVH0SUJPK+3Z3avZ2cju6GTmS2etr62dx+xFoWrKnrsrKt/lZg9F2o5sIsA==",
"my_quiz"=>
{"4e9a4356-2c18-4310-9502-6f287a3d47d7"=>{"answer"=>"1", "question_id"=>"4e9a4356-2c18-4310-9502-6f287a3d47d7", "user_id"=>"397b17a9-005d-4b65-ba81-668582acb12b"},
"32722fb7-3ad4-4614-9e8b-0ea6ee5e3838"=>{"answer"=>"1", "question_id"=>"32722fb7-3ad4-4614-9e8b-0ea6ee5e3838", "user_id"=>"397b17a9-005d-4b65-ba81-668582acb12b"},
"e38b673d-789a-4025-859c-f8a6e6dd80b0"=>{"answer"=>"1", "question_id"=>"e38b673d-789a-4025-859c-f8a6e6dd80b0", "user_id"=>"397b17a9-005d-4b65-ba81-668582acb12b"},
"267f7fab-3a8a-4e3e-8642-a1035c7aa850"=>{"answer"=>"1", "question_id"=>"267f7fab-3a8a-4e3e-8642-a1035c7aa850", "user_id"=>"397b17a9-005d-4b65-ba81-668582acb12b"},
"fd320da5-44d8-4328-a1b1-0ccc2115b49d"=>{"answer"=>"0", "question_id"=>"fd320da5-44d8-4328-a1b1-0ccc2115b49d", "user_id"=>"397b17a9-005d-4b65-ba81-668582acb12b"},
"eab94286-cfeb-40ae-be5f-3d54538d6b0c"=>{"answer"=>"0", "question_id"=>"eab94286-cfeb-40ae-be5f-3d54538d6b0c", "user_id"=>"397b17a9-005d-4b65-ba81-668582acb12b"},
"8b85ff1e-ccdc-4ca5-b289-19505551e305"=>{"answer"=>"0", "question_id"=>"8b85ff1e-ccdc-4ca5-b289-19505551e305", "user_id"=>"397b17a9-005d-4b65-ba81-668582acb12b"},
"b00aa7a6-1072-4fcd-9faa-fcca16046dcb"=>{"answer"=>"0", "question_id"=>"b00aa7a6-1072-4fcd-9faa-fcca16046dcb", "user_id"=>"397b17a9-005d-4b65-ba81-668582acb12b"},
"fc329254-4dba-4a61-ac71-3e148bb8a7fc"=>{"answer"=>"0", "question_id"=>"fc329254-4dba-4a61-ac71-3e148bb8a7fc", "user_id"=>"397b17a9-005d-4b65-ba81-668582acb12b"},
"60791317-ae09-4d28-9569-8b95f7bd8c87"=>{"answer"=>"0", "question_id"=>"60791317-ae09-4d28-9569-8b95f7bd8c87", "user_id"=>"397b17a9-005d-4b65-ba81-668582acb12b"}},
"commit"=>"Submit"}
这是我的创建和白名单方法
def create
params["my_quiz"].each do |question_id, data|
@my_quiz = MyQuiz.new(my_quiz_params)
@my_quiz.save
end
redirect_to user_path(@user), notice: "Thank you taking the quiz!"
end
...
def my_quiz_params
params.require(:my_quiz).permit(my_quiz: [:question_id, :user_id, :answer])
end
当我Save
时,我得到了ids的未经许可的参数
Unpermitted parameters:
:4e9a4356-2c18-4310-9502-6f287a3d47d7,
:32722fb7-3ad4-4614-9e8b-0ea6ee5e3838,
:e38b673d-789a-4025-859c-f8a6e6dd80b0,
:267f7fab-3a8a-4e3e-8642-a1035c7aa850,
:fd320da5-44d8-4328-a1b1-0ccc2115b49d,
:eab94286-cfeb-40ae-be5f-3d54538d6b0c,
:8b85ff1e-ccdc-4ca5-b289-19505551e305,
:b00aa7a6-1072-4fcd-9faa-fcca16046dcb,
:fc329254-4dba-4a61-ac71-3e148bb8a7fc,
:60791317-ae09-4d28-9569-8b95f7bd8c87
我觉得问题在于哈希本身。我可以使用下面的create方法,但感觉不像Rails方式。
def create
return params[:my_quiz].each do |k, v|
puts "Values of V"
puts v.permit(:question_id, :user_id, :answer).inspect
q = MyQuiz.new(v.permit(:question_id, :user_id, :answer))
q.save!
q
end
redirect #somewhere
end
答案 0 :(得分:0)
问题是您需要手动将所有这些参数列入白名单,如下所示:
def my_quiz_params
params.require(:my_quiz).permit(
"4e9a4356-2c18-4310-9502-6f287a3d47d7": [:question_id, :user_id, :answer],
"32722fb7-3ad4-4614-9e8b-0ea6ee5e3838": [:question_id, :user_id, :answer]
#...
)
end
请注意,由于您已在:my_quiz
中添加了require
,因此您无需将其添加到permit
。
但我想你不想那样,所以你可以改用permit!
:
def my_quiz_params
params.require(:my_quiz).permit!
end
请注意permit!
允许任何参数通过my_quiz
组。
另一种选择(如果您希望的行为允许)将从您的表单中删除question.id
:
.row
.col-lg-6
= form_tag my_quizzes_path do
- @questions.each do |question|
= fields_for @my_quiz do |p|
.field
%p= question.title
= p.label :answer
= radio_button_tag "my_quiz[][answer]", '0'
= radio_button_tag "my_quiz[][answer]", '1'
= hidden_field_tag "my_quiz[][question_id]", question.id
= hidden_field_tag "my_quiz[][user_id]", current_user.id
.actions
= submit_tag
因此,您将收到没有该ID的参数(您已在:question_id
中发送):
{
"utf8"=>"✓",
"authenticity_token"=>"gJYhNisJDuLkfgm3rmy5VBJZ2koMVH0SUJPK+3Z3avZ2cju6GTmS2etr62dx+xFoWrKnrsrKt/lZg9F2o5sIsA==",
"my_quiz"=>[
{"answer"=>"1", "question_id"=>"4e9a4356-2c18-4310-9502-6f287a3d47d7", "user_id"=>"397b17a9-005d-4b65-ba81-668582acb12b"},
{"answer"=>"1", "question_id"=>"32722fb7-3ad4-4614-9e8b-0ea6ee5e3838", "user_id"=>"397b17a9-005d-4b65-ba81-668582acb12b"},
{"answer"=>"1", "question_id"=>"e38b673d-789a-4025-859c-f8a6e6dd80b0", "user_id"=>"397b17a9-005d-4b65-ba81-668582acb12b"},
...
]
"commit"=>"Submit"
}
您的白名单方法将更改为:
def my_quiz_params
params.require(:my_quiz).permit([:question_id, :user_id, :answer])
end