Form_tag url_for_options nil对控制器本身的操作

时间:2014-02-18 11:04:29

标签: ruby-on-rails view controller

我的情况是我有更多的控制器共享一个视图,我试图改变dinamycally动作在传递控制器中定义的变量的表单上

尝试一些解决方案我观察到如果我在url_for_options form_tab变量中有一个nil变量,则视图中的表单具有从调用视图的正确控制器路径

<%= form_tag nil, :method => :get, :class => 'search' do %>

是一个错误还是一个功能?

3 个答案:

答案 0 :(得分:7)

请注意,如果传递空字符串而不是nil,则会出现略微不同的行为:

form_tag nil

创建

<form action="(URL based on current controller and action)">....

虽然

form_tag ""

创建

<form action>....

如果您所使用的网页的网址是&#34; / foo / bar&#34; (对于FooController #bar),那么两者在功能上是等价的。 如果当前页面的URL是&#34; / foo / bar?a = 1&amp; b = 2&#34;,前者将继续指向&#34; / foo / bar&#34;,而后者将导致提交到完整URL的表单(包括查询字符串)。这是因为后者使用HTML标准(无操作或空操作=使用当前URL,包括查询字符串)。相反,前者触发Rails标准(url_for =&gt; nil使用当前控制器和方法)。

只是认为它值得一提,因为有些情况下,无操作形式的HTML标准更有用(即,您希望查询字符串参数粘性的地方),以及nil之间行为的细微差别和&#34;&#34;很容易错过。

答案 1 :(得分:2)

解决方案是在表单上使用空操作属性将该表单提交到当前页面。并在RFC 2396

中进行了描述
  

4.2。同文档参考

     

不包含URI的URI引用是对
的引用   目前的文件。换句话说,一个空的URI引用   文档被解释为对该文档开头的引用,   并且仅包含片段标识符的引用是引用
  到该文件的已识别片段。遍历这样的一个   引用不应导致额外的检索操作   但是,如果URI引用发生在始终为
的上下文中   旨在产生新的请求,如HTML的FORM的情况   element,则空URI引用表示
的基URI   当前文档,在转换时应该被该URI替换   进入请求。

时的奇怪行为

url_for_options == nil

<form accept-charset="UTF-8" action="/welcome" class="search" method="get">

url_for_options ==“”

<form accept-charset="UTF-8" action class="search" method="get">

答案 2 :(得分:1)

这不是一个错误。如果您不对'form_tag'或'form_for'提供任何操作,默认情况下它将被发布到调用视图的同一控制器。