我的情况是我有更多的控制器共享一个视图,我试图改变dinamycally动作在传递控制器中定义的变量的表单上
尝试一些解决方案我观察到如果我在url_for_options form_tab变量中有一个nil变量,则视图中的表单具有从调用视图的正确控制器路径
<%= form_tag nil, :method => :get, :class => 'search' do %>
是一个错误还是一个功能?
答案 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'提供任何操作,默认情况下它将被发布到调用视图的同一控制器。