Ruby on rails 表单\u标签url\u用于控制器本身的\u选项nil操作

Ruby on rails 表单\u标签url\u用于控制器本身的\u选项nil操作,ruby-on-rails,view,controller,Ruby On Rails,View,Controller,我的情况是,我有更多的控制器共享一个视图,我试图通过传递控制器中定义的变量来改变表单上的操作 尝试一些解决方案时,我发现如果url_for_options form_tab变量中有一个nil变量,则视图中的表单具有调用视图的正确控制器路径 :get,:class=>“搜索”do%> 这是错误还是功能?解决方案使用表单上的空操作属性将表单提交到当前页面。并在上进行了描述 4.2。相同的文件参考 不包含URI的URI引用是对 当前文件。换句话说, 文件被解释为对该文件开头的引用, 仅包含片段标识

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

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


:get,:class=>“搜索”do%>


这是错误还是功能?

解决方案使用表单上的空操作属性将表单提交到当前页面。并在上进行了描述

4.2。相同的文件参考

不包含URI的URI引用是对 当前文件。换句话说,
文件被解释为对该文件开头的引用, 仅包含片段标识符的引用是引用
指向该文件的已识别片段。这样一条路径的遍历
引用不应导致额外的检索操作。
但是,如果URI引用发生在总是
用于产生新的请求,如HTML表单的情况
元素,则空URI引用表示 当前文档,转换时应替换为该URI
变成一个请求

一种奇怪的行为

url\u用于\u选项==nil


url_用于_选项==“”



这不是一个bug。如果您没有为“form_tag”或“form_for”提供任何操作,默认情况下,它将发布到从中调用视图的同一控制器

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

form_tag nil
创造

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

<form action="(URL based on current controller and action)">....
<form action>....
。。。。
如果您所在页面的URL是,比如说,“/foo/bar”(对于FooController#bar),那么这两个URL在功能上是等效的。 如果当前页面的URL为“/foo/bar?a=1&b=2”,则前者将继续指向“/foo/bar”,而后者将生成提交到完整URL的表单(包括查询字符串)。这是因为后者使用HTML标准(无操作或空操作=使用当前URL,包括querystring)。相反,前者触发了Rails标准(对于url为nil_for=>use current controller and method)


我只是认为值得一提,因为在某些情况下,无操作表单的HTML标准更有用(即,您希望querystring参数是粘性的),而nil和“”之间的细微行为差异很容易忽略。

如果未指定:url选项,默认情况下,表单将被发送回当前URL。这似乎是表单的默认行为。设计功能)哦,对不起,刚刚注意到@luca milan已经在下面介绍了这一点