2016-06-28 2 views
0

У меня есть модель вопроса и ответ модель:Rails вложенной PARAMS не работает должным образом

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

Вот являются PARAMS я посылаю для вызова #update в QuestionsController:

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

Теперь вот часть, я изо всех сил трагически: Я хочу, чтобы эти Params в белый список. Я не могу управлять именами параметров, поэтому я не могу переименовать 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 

EDIT:

accepts_nested_attributes_for :answers Использование и question_form.fields_for :answers do |answer_form| сгенерирует associations_attributes Params, что вы ищете область.

ожидал, что question_form является чем-л, как form_for @question do |question_form

+0

'.require (: вопрос)' Я не вопрос парам приходить в PARAMS я отправляю в вопросе выше, и они. «не меняется. В этом вся цель для этого вопроса. – Snowman

Смежные вопросы