我有一个问题模型和答案模型:
class Question < ActiveRecord::Base
has_many :answers
accepts_nested_attributes_for :answers
end
以下是我发送给QuestionsController
的#update电话的参数:
{"id"=>"1", "text"=>"Hello world?",
"answers"=>[{"id"=>1, "text"=>"Answer 4", "question_id"=>1]}
非常简单。更新方法:
def update
@question = Question.find(params[:id])
if @question.update(q_params)
render :json => @question
else
not_valid @question
end
end
现在,我在这里遇到了悲惨的问题:我想将这些参数列入白名单。我无法控制参数名称,因此我无法将answers
重命名为answers_attributes
。我发现的唯一有用的东西,有点荒谬,就是:
def q_params
p = ActiveSupport::HashWithIndifferentAccess.new(params)
p[:answers_attributes] = p.delete :answers
end
我真的想以正确的方式做到这一点,仅使用permit
。这是我尝试过的一系列行,其中没有一行有效:
params.permit(:text, {:answers_attributes => [:text]})
# or
permitted = [:text, answers_attributes: [:id, :text]]
params.permit(*permitted)
# or
params.permit(:text, {:answers => [:text]})
有什么想法吗?
答案 0 :(得分:0)
试试这个
def question_params
params.require(:question).permit(:id, :text, answers_attributes: [:id, :text])
end
和更新
def update
@question = Question.find(params[:id])
if @question.update_attributes(question_params)
render :json => @question
else
not_valid @question
end
end
编辑:
使用accepts_nested_attributes_for :answers
和question_form.fields_for :answers do |answer_form|
将生成您所寻找的associations_attributes
参数。
期待
相似question_form
与form_for @question do |question_form