【发布时间】:2013-11-24 03:03:00
【问题描述】:
我有一个显示动物列表的表单,让我可以选择多个动物并对它们做一些事情。在同一个表单中,我需要为列表中的每个动物提供一个链接,该链接将发布到另一个控制器,并使用该动物的 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"=>"animal"} 所以,我收到一条错误消息:找不到 id=animal 的医疗记录
将“动物”作为 id 与实际 id(在本例中为 1)发布,我做错了什么?
更新: 显然,无论我如何更改 link_to,它都会尝试转到控制器中的“显示”以获取病历而不是动物方法。
更新: 如果我在我的表单中嵌套一个表单,它可以正常工作......但不是列出的第一条记录:
<%= form_tag("/medicalrecords/animal") do %>
<%= hidden_field_tag(:animal_id, animal.id) %>
<%= submit_tag("Add") %>
<% end %>
但是,我不能在表单中允许表单。因此,我必须将其转换为带有发布方法的链接。
我包含的 link_to 示例使用正确的值发布正确的参数,但它会将其发布到医疗记录#show 而不是医疗记录#animal。
有人知道我需要做什么来解决这个问题吗?
【问题讨论】:
-
我认为
/medicalrecords/animal将转到MedicalRecordsController#show' 而不是MedicalRecordsController#animal。路由按照定义的顺序进行解析。你能提供请求的http方法吗?另外,您可以检查路线以查看之前定义的类似路线吗? -
@vss123 你是对的。这将是#show vs #animal。使用 :method=> post 我希望链接将使用 post 方法。
标签: ruby-on-rails post activerecord