2012-07-17 82 views
1

我是使用rails 3.2.3的RoR初學者。Ruby on Rails - 使用自定義動作設置自定義路線

我有一個產品資源和它下面的嵌套可用性資源。

我的路線是:

/products/:product_id/availabilities 

這是偉大的工作。但是,我的可用性模型允許在確切的日期設置產品的價格,例如:今天產品'x'將具有'y'可用性(它是整數)和'z'價格(價格也是可用性模型的一個屬性)。

我的問題是,我現在想添加一個頁面,允許修改價格(而不是創建一個新的價格模型),類似於我的可用性。我只使用索引操作,因爲它會顯示所選產品的所有可用性。

我怎樣才能創建這樣一個路徑:

/products/:product_id/availabilities/prices 

我嘗試添加這對我的路線RB:

match '/products/:id/availabilities/prices', :action => 'indexP', :via => [:get], :controller => 'prices' 
match '/products/:id/availabilities/prices', :action => 'createP', :via => [:post], :controller => 'prices' 

值得注意的是,我使用prices controller使用相同的交互可用性模型,但這應該不成問題。

我也在那prices controller創建了indexPcreateP的動作。 在我的Availabilities視圖中,我創建了indexP.html.erb以區別於包含可用性的常規index.html.erb

當我運行rake routes我得到:

$ rake routes | grep prices 
          GET /products/:id/availabilities/prices(.:format) 
          POST /products/:id/availabilities/prices(.:format) 

這是偉大的。然而,當我訪問該網址,我得到:

NoMethodError in Availabilities#show 
{"product_id"=>"46", 
"id"=>"prices"} 

爲什麼做show行動,而不是我的自定義是否匹配?

:我後是這樣的:/產品/:ID /可用性/:ID /價格

只是:/產品/:ID /可用性/價格

我知道這可能是一個愚蠢的問題,但我會很感激任何提示,以幫助我瞭解發生了什麼。

由於提前, 問候

回答

0

如何爲您的產品型號設置?

如果是這樣的:

resources :products do 
    resources :availabilities 
end 

路由沒有在第一場比賽進入到可用性控制器的表演動作。

您有兩種選擇。限制可用性控制範圍的,具有:

resources :products do 
    resources :availabilities, :only => [:index] 
end 

或將您的自定義匹配此塊之前

match '/products/:id/availabilities/prices', :action => 'indexP', :via => [:get], :controller => 'prices' 
match '/products/:id/availabilities/prices', :action => 'createP', :via => [:post], :controller => 'prices' 

注意,該路由不被問題的REST。這可能給你帶來麻煩以後:)

希望這有助於。

+1

哦,我......我不能相信時採取了先前的塊之前該塊位置......我完全以忘記這個重要的方面:第一'創建 - >最高priority.'感謝robertokl,雖然我也相信如果應用程序需要擴展,這可能會讓我陷入困境,我感謝你幫助我這麼快。雖然我建議任何其他人提出這個問題來創建一個新模型,以避免未來的麻煩。無論如何,標記爲已回答,問候 – Silver 2012-07-17 17:32:58