2016-06-28 46 views
0

我有一個問題模型和應答模型:Rails的嵌套PARAMS不能正常工作

class Question < ActiveRecord::Base 
    has_many :answers 
    accepts_nested_attributes_for :answers 
end 

這裏是我送的#UPDATE調用QuestionsController的PARAMS:

{"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

試試這個

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 :answersquestion_form.fields_for :answers do |answer_form|將產生associations_attributes PARAMS您地區尋找。

期待的是question_form就像form_for @question do |question_form

+0

不便'.require(:問題)'我沒有問題PARAM在未來我張貼的PARAMS在上面的問題和他們。 '不可改變。這是這個問題的全部目的。 – Snowman