2013-11-24 46 views
0

我有一個顯示動物列表的表單,並讓我選擇多個動物並對它們進行操作。在這個相同的表單中,我需要爲列表中的每個動物提供一個鏈接,並將其發佈到另一個控制器,並使用發佈的該動物的ID進行操作。因此,我需要一個鏈接在我的另一個表單中(不會嵌套表單),並將其發佈到另一個URL。這是我需要張貼到路線:rails link_to method = post with param

animal_medicalrecords POST /medicalrecords/animal(.:format) medicalrecords#animal 

這是在動物控制器的形式,我已經把現在不工作了的link_to:

<%= form_tag(action: "takeaction") do %> 
...some irrelevant form stuff ... 
<% @animals.each do |animal| %> 
    <%= link_to "Add", animal_medicalrecords_path(:animal_id => animal.id), :method=> :post %> 

當我點擊鏈接它帶我到這裏../medicalrecords/animal?id=1並有這些參數:{「id」=>「animal」} 所以,我得到一個錯誤,說:找不到Medical idord與id = animal

我做錯了,它張貼「動物」作爲身份證與實際的身份證(我這個案例是1)?

更新: 顯然,無論我如何改變link_to,它一直試圖去控制器中的「顯示」醫療記錄,而不是動物方法。

更新: 如果我窩我的表單中的窗體它正常工作......但不是第一個記錄中列出:

<%= form_tag("/medicalrecords/animal") do %> 
<%= hidden_field_tag(:animal_id, animal.id) %> 
<%= submit_tag("Add") %> 
<% end %> 

但是,我不能讓一個表單中的表單。所以,我必須將其轉換爲與帖子方法的鏈接。

link_to示例我已經列出了正確的參數值,但它將它發佈到medicalrecords#show而不是medicalrecords#animal。

任何人都知道我需要做什麼來解決這個問題?

+0

我認爲'/ medicalrecords/animal'要去'MedicalRecordsController#show''而不是'MedicalRecordsController#animal'。路線按其定義的順序進行解析。 你能否提供請求的http方法? 此外,你可以檢查路線,看到類似的路線之前定義? – siliconsenthil

+0

@ vss123你是對的。它將去#show vs #animal。用:method => post我希望鏈接將使用post方法。 –

回答

0

你可以把這樣的事情在你的routes.rb

resources :medicalrecords do 
    post 'animal', on: :collection 
end 

另一種方式,如果你想有更多的方法內部控制器:

resources :medicalrecords do 
    collection do 
    post 'animal' 
    end 
    member do 
    get 'method' # will create route: GET '/medicalrecords/:id/method' 
    end 
end 

將路由/ medicalrecords /動物在醫療記錄控制器中的方法動物