我有一个显示动物列表的表格,让我选择多个动物并用它们做点什么。在同一形式中,我需要为列表中的每个动物提供一个链接,该链接将发布到另一个控制器,并发布该动物的id。因此,我需要一个链接在我的另一个表单(没有表单嵌套)内,这个链接将发布到另一个URL。这是我需要发布的路线:
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”=&gt;“animal”} 所以,我收到的错误是:找不到带有id = animal
的医疗记录我在做错的是将“动物”作为id与实际ID(在这种情况下为1)发布?
更新: 显然无论我如何更改link_to,它都会继续尝试去控制器中的“show”而不是动物方法。
更新: 如果我在表单中嵌套表单,它可以正常工作......但不是列出的第一个表单:
<%= form_tag("/medicalrecords/animal") do %>
<%= hidden_field_tag(:animal_id, animal.id) %>
<%= submit_tag("Add") %>
<% end %>
但是,我不能允许表单中的表单。所以,我必须将其转换为带帖子方法的链接。
我包含的link_to示例使用正确的值发布了正确的参数,但是它将其发布到medicalrecords#show而不是medicalrecords#animal。
任何人都知道我需要做些什么来解决这个问题?
答案 0 :(得分: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
这会将/医疗记录/动物传递给医疗记录控制器中的方法动物