2014-01-26 1 views
0

В вебе-запросе, мои первоначальные Титулы, как это, не включая несвязанную часть:Построить новый Params передать разрешение на Rails

params = { 
    "base_table"=>{"name"=>"syy", "age"=>"12"}, 
    "tennis_questionaire"=>{"tennis_ball_num"=>"3718"}, 
    "id"=>"1" 
} 

Я хочу поставить «base_table» под «tennis_questionaire», потому что он принадлежит_shadow_questionaire, и я хочу обновить два объекта, используя только один метод обновления. То есть, конечный результат я хочу что-то вроде этого:

params[:tennis_questionaire] = 
    {"tennis_ball_num"=>"3718", "base_table"=>{"name"=>"syy", "age"=>"12"}}, 

Для того, чтобы достичь этого, я создал action_filter предварительно обработайте Титулы, как это:

before_action :update_param, only: [:create,:update] 

def update_param 
    params[:tennis_questionaire][:base_table] = ActionController::Parameters.new(
    params.require(:base_table).permit(:name, :age) 
) 
end 

Однако, когда я пытается разрешить ее в реальном коде обработки Params (последний шаг перед тем, как передать его update метод):

params.require(:tennis_questionaire).permit(:tennis_ball_num,:base_table) 

Я обнаружил, что: base_table не допускается.

Почему это так? Любые предложения о том, как заставить его работать ~?

Большое спасибо

ответ

0

Я нашел, почему после некоторых исследований. Обращаясь к: docs on permit, если вы хотите разрешить массив/объект, нужно указать элементы, которые должны быть разрешены. Кроме того, нет способа разрешить весь массив/объект.

Так что для моего случая выше, я должен поставить:

params.require (: tennis_questionaire) .permit (: tennis_ball_num, base_table: [: имя, возраст:]) вместо этого.