1

我想知道为什么

<%= form_tag( { :action => "/search", :method => "get" }, :class => "span4" ) do %>
...
<% end %>

给出以下错误?

No route matches [POST] "/assets"

我注意到这是因为 /search。如果我将代码重写为...

<%= form_tag( { :action => "search", :method => "get" }, :class => "span4" ) do %>
...
<% end %>

没有 /search,它会正确调用我的控制器方法。有人可以解释为什么吗?谢谢

4

2 回答 2

3

这将达到你的意思:

<%= form_tag( "/search", :method => "get" , :class => "span4" ) do %>
...
<% end %>

如果 的第一个参数form_tag是您给定的哈希,则将其在幕后传递给 ,它被url_for解释:action为反向映射路线的操作部分。

由于您(我猜)只想传递一个纯 URL,因此只需将其作为第一个 arg 的字符串传递。

当然这里有更多信息:)

于 2012-04-06T04:18:49.220 回答
1

":action" 应该收到一个名为 "action" 的名称,例如:"create"、"update" 或 "destroy"

:action => "/search"

这里的“/search”不是一个名字,而是一个“url”,这是不合法的。

顺便说一句,我建议你使用 xx_url 而不是 { :action => "", :controller => ""},例如

<%= form_tag "/search", :method => "get" %>  

或者

# you defined "search_path" in config/routes.rb
<%= form_tag search_path, :method => "get" %>
于 2012-04-06T04:14:38.363 回答