【问题标题】:Rails button_to fails with path doesn't exist for a path that existsRails button_to 失败,路径不存在
【发布时间】:2011-07-10 10:11:06
【问题描述】:

编写我的第一个非常简单的 Rails 应用程序,这是一个简单的管理应用程序,用于跟踪我们一个部门的工作。为人员生成的索引页面上有一个 link_to 以添加新人员。我试图将其更改为 button_to 并未能说明路径 /people/new 不存在,但显然它确实存在,因为 link_to 去了同一个地方。

我使用的是 Rails 3/Ruby 1.9.2。我的 /app/views/people/index.html.erb 页面上有此代码:

<%= link_to 'New Person', new_person_path %>
<%= button_to "New", :controller => "people", :action => "new" %>

link_to 有效。 button_to 失败:

路由错误 没有路线匹配“/people/new”

也试过了

<%= button_to 'New Person', new_person_path %>

同样的错误。奇怪。

【问题讨论】:

  • 你的路线是什么样的?
  • 如果你觉得自己有答案,记得选择一个答案,这样这个问题就可以结束了:)
  • 我想我做到了。我点击旁边的复选标记,对吧?

标签: ruby-on-rails ruby-on-rails-3 routes


【解决方案1】:

对此有一个很好的解释,一如既往:)

link_to 默认使用 GET,button_to 使用 POST。并且没有匹配的 POST 路由,只有 GET 路由。

如果您想使用 button_to,您可以将 :method =&gt; :get 添加到您的按钮参数中,它将使用 GET。

【讨论】:

  • 就是这样!谢谢西蒙。正如我所说,我是 Rails 新手,还没有深入探索美妙的路线世界,直到现在让 Rails 自动完成所有工作。
  • 太好了,很高兴为您提供帮助。您绝对应该阅读路线上的 ruby​​ on rails 指南,这很棒:) guides.rubyonrails.org/routing.html
【解决方案2】:

button_to 默认为 post 方法。尝试将:method =&gt; :get 放在那里。这就是link_to 起作用的原因。

【讨论】:

  • 这很有趣。根据他们自己的文档,它应该可以在不更改 http 方法的情况下工作,但这当然是有道理的。
【解决方案3】:

您的button_to 在表单中吗? button_to 创建自己的表单,因此这会在表单中创建表单并可能中断路由。

【讨论】:

  • 不,需要更改的是 HTTP 方法。但是感谢您的帮助!
【解决方案4】:

您是否在 config/routes.rb 中设置了路由选项?检查你的 routes.rb 文件中是否有这个:

resources :people

查看此guide 了解有关路线如何运作的更多信息。

【讨论】:

  • 需要更改的是HTTP方法。感谢您的帮助!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-11-16
  • 1970-01-01
  • 2021-09-30
相关资源
最近更新 更多