【问题标题】:rails link_to method = post with paramrails link_to 方法 = 使用参数发布
【发布时间】: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


【解决方案1】:

你可以在你的 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/animal 路由到医疗记录控制器中的方法动物

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-09-03
    • 1970-01-01
    • 1970-01-01
    • 2011-03-28
    • 1970-01-01
    • 2013-07-18
    • 2023-03-14
    • 1970-01-01
    相关资源
    最近更新 更多