2015-06-17 1 views
0

я прохожу Params как этотRails 4 разрешает любые ключи в хэш

{ 
    "utf8" => true, 
    "supply" => { 
    "items" => { 111 => 112, 89 => 10}, 
    "another_params" => "something" 
    } 
} 

Мои supply_params являются:

params.fetch(:supply, {}).permit(:another_params, items: {}) 

Но я получаю unpermitted parameters 111 and 89. Как я могу сделать items разрешить все виды ключей?

+0

, позволяющий родительскому ключу разрешать все дочерние ключи. поэтому достаточно просто «снабжать». – Anthony

+0

Не просто 'params.fetch (: supply, {}). Allow (: another_params,: items)' работает в вашем случае? –

+0

Pawel, кажется нет .... – asiniy

ответ

1

This thread в GitHub обеспечивает решение:

def supply_params 
    params.require(:supply).permit(:another_params).tap do |whitelisted| 
    whitelisted[:items] = params[:supply][:items] if params[:supply][:items] 
    end 
end 

Идея заключается в том, чтобы явно разрешить любые известные атрибуты которые необходимы, а затем применяются для вложенных атрибутов.

+0

Я уже писал об этом – asiniy

+0

Lol Я забыл все об этом, а затем увидел комментарии от вас сегодня и @nathandva, поэтому я написал его. Пока вы решили проблема, это нормально. В будущем я попытаюсь написать что-то раньше, чтобы вы могли его принять. –

+0

И я забыл об этом :) – asiniy

0

Согласно @steve Клейн link to github issue, это считается хорошим решением:

params.permit(:test).tap do |whitelisted| 
    whitelisted[:more] = params[:more] 
end 
+0

Почему бы не дать Стиву Клейну настоящий кредит, и пусть он ответит? – nathanvda

+0

Я могу это сделать, но я не знаю, как это сделать. – asiniy

+0

Кажется не работает на рельсах 5 :( –