2014-02-18 36 views
2

我的情況下是,我有多個控制器與共享一個視圖和我試圖dinamycally改變傳遞控制器的form_tag url_for_options零動作控制器本身

限定的可變嘗試一些溶液窗體上的動作我已經觀察到,如果我在url_for_options form_tab變量爲零的變量,在視圖的形式具有從其中視圖被稱爲

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

是它的一個錯誤或一個特徵的權利控制器路徑?

+0

如果未指定:url選項,默認情況下表單將被髮送回當前的url –

+0

它看起來像是表單的默認行爲。設計功能) – itsnikolay

回答

1

該解決方案使用表單上的空行爲屬性將該表單提交給當前頁面。並描述於RFC 2396

4.2。相同文檔參考文獻

不包含URI的URI引用是對當前文檔的引用。換言之,文檔中的空URI參考被解釋爲對該文檔的開頭的引用, ,並且僅包含片段標識符的引用是對該文檔的標識片段的引用
。遍歷這樣的
引用不應該導致額外的檢索操作。
然而,如果在一個上下文中,始終是
應產生一個新的請求,如在HTML的FORM
元件的情況下發生的URI引用,那麼空的URI引用表示
電流的基礎URI文檔,並且在將
轉換爲請求時應由該URI替換。

url_for_options ==零個

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

url_for_options == 「」

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

0

這是不是一個錯誤一個奇怪的行爲。如果您不提供任何'form_tag'或'form_for'的操作,默認情況下它會被髮布到調用了視圖的同一個控制器。

3

需要注意的是,如果你傳遞一個空字符串,而不是零,你會得到一個稍微不同的行爲:

form_tag nil 

創建

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

雖然

form_tag "" 

創建

<form action>.... 

如果您所在頁面的URL是「/ foo/bar」(對於FooController#bar),那麼這兩者在功能上是等效的。 如果當前頁面的URL是「/ foo/bar?a = 1 & b = 2」,則前者將繼續指向「/ foo/bar」,而後者將導致提交給完整的URL(包括查詢字符串)。這是因爲後者使用了HTML標準(無動作或空動作=使用當前URL,包括查詢字符串)。相反,前者觸發Rails標準(對於url_for =>使用當前控制器和方法爲零)。

只是認爲值得一提的是,有些情況下,無標題表單的HTML標準更有用(即,您希望查詢字符串參數粘滯的地方)以及nil和「」之間行爲的細微差別很容易錯過。

+0

哎呀,對不起,剛注意@ luca-milan已經在下面介紹了 – Benissimo