2011-05-16 56 views
5

在我的Rails 3.0應用程序中,我的資源上有一系列非常大的搜索表單:索引頁,需要使用POST而不是GET。Rails 3:在索引頁面上使用POST表單?

目前,當我想讓它路由到資源#索引時,該應用將POST請求路由到資源#create。我意識到這是RESTful路線,但需要覆蓋它。我怎麼能做到這一點,同時還保留創建該資源的新記錄的能力?

非常感謝。

+0

不使用POST作爲搜索表單與REST範例相矛盾嗎? GET不會更合適嗎? – Wukerplank 2011-05-16 07:06:34

+1

GET絕對更合適,但對於所有搜索參數,url長度限制太小。 – Andrew 2011-05-16 13:41:31

回答

2

你最好有一個「搜索」的行動,只是後 - 再呈現指數模板如:

class MyController < ... 
    def search 
    @my_things = MyThing.find_with_search_params(params[:search]) 
    render :action => :index 
    end 
end 
0

所以你希望你的「創建」動作在控制器中的終點做2件事 - 響應搜索和做的也是?糟糕的主意,但解決方案可能與在創建操作中使用「if」條件來執行其中一個操作一樣簡單。如果它不是一個滿意的答案,請隨時澄清你的問題多一點。

+0

我看到這是一個壞主意,並希望避免它。我想我希望有一個路由解決方案,而不是兩者都使用創建控制器。也許只是將搜索的url從索引頁面移動到資源/搜索或資源/全部。 – Andrew 2011-05-16 13:44:39

+1

如果你真的很寧靜,這將無縫工作。 /資源的URL與GET將命中索引操作,並執行一個搜索和/ POST的資源將擊中創建操作,並做好一個創建。您的視圖必須確保搜索鏈接/按鈕是GET方法,並且正在使用POST進行創建。這是路由解決方案。 /資源與GET =>索引和/資源與POST =>創建。 – 2011-05-16 14:13:59

3

您可以使用索引,只需在Rails的3條路線補充一點:

resources :my_things do 
    post :index 
end