17

我有这段代码:

<%= link_to "New User", new_user_path, :class => "button"  %><br />

效果很好,但是当我将其更改为

<%= button_to "New User", new_user_path, :class => "button"  %><br />

我收到这个错误

没有路线匹配 [POST] "/users/new"

任何帮助都将不胜感激。

4

4 回答 4

30

Jesus Rodriguez 对 POST 和 GET 的看法是正确的,但如果您真的需要按钮,您可以简单地覆盖默认方法:

<%= button_to "New User", new_user_path, :class => "button", :method => :get  %>
于 2012-09-18T10:48:23.120 回答
19

“link_to”正在寻找/users/new使用GET

“button_to”正在使用POST寻找/users/new

如果您使用以下方法为控制器创建路由:

resources :user

默认情况下,/users/newGET而不是POST,因此第二行找不到任何路由。

如果您正在考虑将该操作更改为POST,我认为您应该忘记它。

于 2012-09-18T10:43:14.230 回答
2

button_to 默认为 POST,link_to 默认为 GET,这就是 links_to 起作用的原因。您可以强制 button_to 使用 GET:

<%= button_to "New User", new_user_path, :class => "button", :method => :get %>

您可以在此处获取有关 button_to 选项的更多信息:http: //api.rubyonrails.org/classes/ActionView/Helpers/UrlHelper.html#method-i-button_to

于 2012-09-18T10:47:13.963 回答
2

除了强制 button_to 使用非默认方法,您还可以向 link_to 发送一个类。

<%= link_to "New User", new_user_path, :class => "button" %>
于 2015-01-25T05:25:42.037 回答