2011-11-14 50 views
6

雖然它通常違反我們的設計原則,但我們需要控制器對GET請求執行#create操作(它是涉及一系列重定向到外部服務)。有誰知道這樣做的目的是什麼?我並不想走出由Rails路線提供的資源豐富的路由框架。我們不需要通常會響應該GET請求的#index操作。資源豐富的路由,但使用GET而不是POST的#create動作

我發現(奇怪),這個工作,但如果它的目的我不知道,或者如果我們會被利用Rails中的錯誤,後來冒着破壞了線:

resources :agreements, :except => [:index, :create] do 
    get :create, :on => :collection 
end 

如果這get :createget :something,我們就不得不像

Helper: something_agreement_path 
Request: GET /agreements/:agreement_id/something 
Action: agreements#something 

但Rails的路線實際上產生我們想要的東西:

Helper: agreements_path 
Request: GET /agreements 
Action: agreements#create 

錯誤或功能?

回答

1

我知道這可能不是最新的路由代碼,但這個鏈接有大量關於Rails路由的信息。在第2.3節中介紹瞭如何構建RESTful路由。

Rails Routing from the Inside Out

如果我是通過我讀簡要有猜測。默認的REST動作被手動分配給特定的路由。所以當你改變create action來使用GET的時候,它有一些記錄(路由哈希),它在創建新記錄之前就已經創建了。

所以要回答你的問題,我假設這種行爲是基於Rails路由代碼的內部工作原理。我認爲在將來的某個時候,這可能會發生變化。

+0

謝謝,我會讀一讀這個。我認爲這歸功於*實施*,這是令我擔心的......如果它不是預期的*行爲*,那麼這將在某個時候破裂。也許我應該定義一個不同於'#create'的動作;我現在只是很好奇,如果有一種改變用於每個動作的HTTP動詞的預期方法:)我們可以改變路徑,但看起來不是動詞。 – d11wtq

相關問題