2016-02-01 1 views
0

Учитывая парам-набор, как это:Белый список вложенных PARAMS с params.permit в Rails 4

params = ActionController::Parameters.new(
{sync:{ 
    "id1":[{error:"1", balance:"1"}], 
    "id2": 
     [ 
     {error:"2", balance:"2"}, 
     {error:"22", balance:"22"}, 
     .... 
     {error:"n", balance:"n"} 
     ] 
    } 
    } 
) 

Как можно добавить в белый список вложенных ключей «ID1» и «ID2»

params.require(:sync) 
=> {"1"=>[{"error"=>"1", "balance"=>"1"}], "2"=>[{"error"=>"2", "balance"=>"2"}]} 

Это нормально, но теперь я хотел бы пойти глубже. В этом хеше я хотел бы получить каждый массив из значения с помощью ключа. Как я могу это сделать?

>> params.require(:sync).permit(:id) 
Unpermitted parameters: 1, 2 
=> {} 
+0

[Эта нить] (https://github.com/rails/rails/issues/9454) содержит несколько полезных советов для множества различных сценарии. По его мнению, более свежие комментарии (август 2015 года) наиболее важны для вашей ситуации. – shannondoah

ответ

1

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

Вы должны попытаться установить белый список, как это:

params.require(:sync).permit({id1: [:error, :balance]}, {id2: [{:error, :balance},{:error, :balance},{:error, :balance}]}) 
+0

Эй Спасибо за ваш ответ! Я попробовал также версию с двумя символами в хэш-типах, таких как {: error,: balance}, но я выбрал команду «SyntaxError: (irb): 102: синтаксическая ошибка, неожиданные«, », ожидающие => или,: balance]} , {id2: [{: error,: balance}, {: error,: balance} 'Также мне нужно сделать его более общим, так как я не знаю, сколько объектов будет содержать массив объектов. К сожалению, я не могу изменить полученный формат :( – theDrifter

+0

Я думаю, что модель не очень хорошо спроектирована, вы не можете иметь бесконечные атрибуты, которые должны быть в подробной таблице (или детальной модели), что она должна быть ребенком из вашего оригинала модель. И вы должны получить эти данные в некоторых параметрах или что-то еще, а затем перераспределить их в соответствующие таблицы. –