将link_to更改为button_to时出现“No route matches [POST]”错误

18

我有这段代码:

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

这个代码运行良好,但当我将其改成如下形式时,

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

我遇到了这个错误:

No route matches [POST] "/users/new"

非常感谢任何帮助。

4个回答

31

Jesus Rodriguez正确关于 POST 和 GET 的区别,但如果你确实需要这个按钮,你可以简单地覆盖默认方法:

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

19

"link_to"使用GET请求查找/users/new

"button_to"使用POST请求查找/users/new

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

resources :user

默认情况下,/users/new 是一个 GET 路由而不是 POST,所以第二行代码找不到任何路由。

如果你考虑将该操作改为 POST,我认为你应该放弃这个想法。


2

与其强制使用非默认方法的button_to,您也可以将一个类发送到link_to。

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

此外,您可以添加类来使其“看起来”像一个按钮(如上面的答案所示)。在我的情况下,我正在使用Bootstrap,并执行以下操作:<%= link_to "New User", new_user_path, :class => "btn btn-default" %> - Mike Richards

2

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接