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'

同じ可用性モデルと対話するために を使用していることは注目に値し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/availabilities/prices

これはおそらくばかげた質問だと思いますが、何が起こっているのかを理解するのに役立つヒントをいただければ幸いです。

よろしくお願いします

4

1 に答える 1

0

製品モデルの設定はどうですか?

次のような場合:

resources :products do
  resources :availabilities
end

ルートが最初に一致したものは、availabilities コントローラーの show アクションに進みます。

ここには 2 つのオプションがあります。以下を使用して、可用性コントローラーのスコープを制限します。

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 に答える