簡體   English   中英

Ruby on Rails-使用自定義動作設置自定義路線

[英]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創建了indexPcreateP操作。 在“可用性”視圖中,我創建了一個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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM