2016-02-18 130 views
1

我有一個名爲app的rails對象,當我通過以下方法將它發送給控制器時,我將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

我有一個名爲應用程序的測試文件中的對象,我想在我的控制器中獲得該對象(應用程序)作爲哈希,我怎麼能通過參數發送它? –

+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發送對象。通常情況下,您應該在參數中發送該對象的ID,在接收端應該在控制器中查找。

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

如果您發送一個對象作爲參數,它會自動轉換爲數組。

相關問題