rails form_tag重定向到/ assets

时间:2012-04-06 04:09:03

标签: ruby-on-rails forms

我想知道为什么

<%= 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,它正确调用我的控制器方法。谁能解释为什么?感谢

2 个答案:

答案 0 :(得分:3)

这就是你的意思:

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

如果form_tag的第一个参数是您给出的散列,它会在幕后传递给url_for:action将{{1}}解释为路径的动作部分它可以反向映射。

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

更多信息here当然:)

答案 1 :(得分:1)

“:action”应该收到“action”的名称,例如:“create”,“update”或“destroy”

:action => "/search"

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

不过,我建议您使用xx_url而不是{:action =&gt; “”,:controller =&gt; “}},例如

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

# you defined "search_path" in config/routes.rb
<%= form_tag search_path, :method => "get" %>