![](/img/trans.png)
[英]Ruby On Rails custom route always redirects to controller's show action
[英]Ruby on Rails - Setting a Custom Route with Custom Action
我是使用Rails 3.2.3的RoR初學者。
我有一個產品資源和一個嵌套的Availability資源。
我的路線是:
/products/:product_id/availabilities
效果很好。
但是,我的庫存量模型允許在確切的日期設置產品的價格,例如:今天,產品“ x”的庫存量為“ y”(整數),價格為“ z”(價格也是屬性可用性模型)。
我的問題是,我現在想添加一個頁面,該頁面允許修改價格( 而無需創建新的價格模型),類似於我的可用性頁面。 我僅使用index操作,因為它將顯示該選定產品的所有可用性。
如何創建類似以下的路線:
/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
創建了indexP
和createP
操作。 在“可用性”視圖中,我創建了一個indexP.html.erb
來區別於包含可用性的常規index.html.erb
。
當我運行rake routes
我得到:
$ rake routes | grep prices
GET /products/:id/availabilities/prices(.:format)
POST /products/:id/availabilities/prices(.:format)
太好了 但是,當我訪問該URL時,會得到:
NoMethodError in Availabilities#show
{"product_id"=>"46",
"id"=>"prices"}
為什么要執行show
動作而不是我的自定義匹配?
注意 :我不喜歡這樣的東西:/ products /:id / availabilities /:id / prices
只是:/ products /:id /可用性/價格
我知道這可能是一個愚蠢的問題,但我希望您能從中獲得任何提示,以幫助我了解正在發生的事情。
預先感謝,問候
您的產品型號如何設置?
如果是這樣的話:
resources :products do
resources :availabilities
end
路線所做的第一個匹配將轉到可用性控制器的show動作。
您在這里有兩個選擇。 使用以下方法限制可用性控制器的范圍:
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'
請注意,此路由不是完全充滿的。 這可能會在以后給您帶來麻煩:)
希望這可以幫助。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.