1

我是使用 rails 3.2.3 的 RoR 初学者。

我有一个产品资源和一个嵌套的可用性资源。

我的路线是:

/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'

值得注意的是,我正在使用 aprices controller与相同的可用性模型进行交互,但这应该不是问题。

我也在其中创建prices controllerindexPandcreateP动作。在我的可用性视图中,我创建了一个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/availability/prices

我知道这可能是一个愚蠢的问题,但我希望有任何提示可以帮助我了解正在发生的事情。

提前致谢,问候

4

1 回答 1

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'

请注意,这条路线并不平静。这可能会让你以后遇到麻烦:)

希望这可以帮助。

于 2012-07-17T17:25:08.007 回答