2009-09-07 35 views
1

是否有可能根據表單中的值生成表單提交的url?我想創建一個要求對進行搜索的形式和模型從Rails中的表單參數生成URL

<% form_tag make_model_search_path(:client_id => @client.id) do %> 
<%= select_tag :make, options_for_select(make_list) %> 
<%= select_tag :model, options_for_select(model_list) %> 
<%= submit_tag "Search" %> 
<% end %> 

我想用的是下面的顯示結果

map.make_model_search "client/:client_id/tags/search/make/:make/model/:model", :controller => "tags", :action => "make_model_search", :method => :get 

路線但由於URL之前的任何產生參數發送我不知道如何做到這一點

我希望這樣做的原因是因爲我需要添加分頁到這個最終通過追加「page /:page」到這條路線。

如果這是不可能的。我也不明白爲什麼PARAMS不在URL作爲

"?client_id=ID&make=MAKE&model=MODEL" 

這是我的理解是,這將讓我做同樣的事情

謝謝!

回答

3

我也不明白爲什麼PARAMS不在URL作爲

「?CLIENT_ID = ID &化妝= MAKE &模型=模型」

這是我的瞭解到這將使我 做同樣的事情

從做爲form_tag

該窗體的方法默認爲 POST。

如果您希望在查詢字符串中傳遞選項,則需要將method:>「get」添加到您的form_tag選項中。

+0

這很有道理。我想,因爲我的方法在我的路線上,它會自動做到這一點。謝謝! – stellard 2009-09-07 20:06:26

1

使用「client /:client_id/tags/search /」主要是Rails用於處理路由的REST方法。在這個視圖中,你正在訪問資源的表示(比如說一個客戶端)。

「?client_id = ID」方式只是發送一些參數。

因此,在第一種情況下,您明確要求客戶端的表示形式,而在第二種情況下,您不知道發生了什麼。這是表達和請求信息的一種更簡單的方式。

現在,在你的問題中,我想你是在談論第二種情況。如果你想追加使用GET語句(因爲形式將默認爲POST)的參數,可以,你可以添加一個方法PARAM:

form_tag make_model_search_path(:client_id => @client.id), :method => "get" 

作爲一個方面說明,我認爲你是在你的路徑變得複雜。如果你只是想使用參數,可以你可以只用一些工作像

"client/:client_id/search/", :controller => "tags", :action => "make_model_search", :method => :get 

您的PARAMS(:模型:MAKE)會在你的控制器可用,如果你想使用分頁(檢出will_paginate插件)它會正常工作。

祝你好運!

順便說一下,這些路線實際上並沒有生成過。 「/:client_id /」,「/:make」和其他作爲佔位符,路由引擎將用它來檢查某些路由是否響應類型化的URL並在分配變量後執行它。