2016-02-18 2 views
1

У меня есть объект rails с именем app, когда я отправляю его контроллеру следующим методом, тогда я получаю params [: app] как массив в контроллере. Я уже пробовал много на переполнение стека, но не нашел то, что я искалкак отправить объект Rails на запрос POST в качестве параметра

assert_difference("Tagging.count", 3) do 
     put "/candidates/#{app.id}", {id: app.id, assigned_tags: " #{tag_one.name} #{tag_two.name} #{tag_three.name} " , app: app.to_json } 
    end 

, как я могу получить приложение, как хэш в контроллере через Params [: приложение] ??

+0

Добавить контекст, как выглядит переменная, например, когда это происходит. Запись журнала для запроса будет полезна. – Matt

+0

У меня есть объект в тестовом файле с именем app, я хочу получить этот объект (приложение) в моем контроллере как хэш, как я могу отправить его через params? –

+0

Вы можете отправлять только строки и числа в параметрах, но вы можете структурировать контент в хэш - см. Мой ответ. –

ответ

2

Существует две структуры данных, которые вы можете построить с атрибутом name поля формы.

foo[] поместит значение в массив называется foo

foo[bar] поместит значение в хэш называется foo, с помощью ключа bar.

например

<input type="text" name="foo[]" value="bacon"> 
    <input type="text" name="foo[]" value="chicken"> 
    => params = {:foo => ["bacon", "chicken"]} 

    <input type="text" name="foo[bar]" value="bacon"> 
    <input type="text" name="foo[baz]" value="chicken"> 
    => params = {:foo => {:bar => "bacon", :baz => "chicken"}} 

Их можно комбинировать:

<input type="text" name="foo[bar][]" value="bacon"> 
    <input type="text" name="foo[baz][]" value="chicken"> 
    => params = {:foo => {:bar => ["bacon"], :baz => ["chicken"]}} 

    <input type="text" name="foo[][bar]" value="bacon"> 
    <input type="text" name="foo[][baz]" value="chicken"> 
    => params = {:foo => [{:bar => "bacon", :baz => "chicken"}]} 
+0

Хорошее объяснение @Max – techdreams

0

Вы не можете отправить объект через Params. Обычно вы должны отправить идентификатор этого объекта в параметрах, а в конце приема - искать в контроллере.

user = User.find(params[:user_id]) 

Если вы отправите объект в качестве параметров, он будет автоматически преобразован в массив.

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