0

私の場合、routes.rbの完全に趣のある振る舞いで戦ってきました。私はCarmengemを私のrailsアプリに実装しようとしました。私はこのチュートリアルに従いました。最初の1つは国、2つ目は地域(この場合はサブ地域)の2つの従属選択ボックスが必要でした。私はそれが機能しない理由を見つけるためにほぼ2時間を費やしました。最後に、解決策は非常に単純でした。routes.rbの2行を切り替えるだけです。そして今、私の質問です。最初のケースで、サーバーエラーからの応答があった理由と、私のRailsアプリがshow actionでリクエストを送信しようとした理由を誰かに説明してもらえますか?本当にわかりません。ありがとうございました。

エラー:

Routes.rb

resources :orders
get '/orders/subregion_options' => 'orders#subregion_options'

Server output

Started GET "/orders/subregion_options?parent_region=US" for 127.0.0.1 at 2012-08-13 23:18:35 -0700
Processing by OrdersController#show as HTML
  Parameters: {"parent_region"=>"US", "id"=>"subregion_options"}
  Order Load (1.3ms)  SELECT "orders".* FROM "orders" WHERE "orders"."id" = $1 LIMIT 1  [["id", "subregion_options"]]
Completed 500 Internal Server Error in 3ms

ActiveRecord::RecordNotFound (Couldn't find Order with id=subregion_options):
  app/controllers/orders_controller.rb:26:in `show'

正しい動作:

Routes.rb

get '/orders/subregion_options' => 'orders#subregion_options'
resources :orders

Server output

Started GET "/orders/subregion_options?parent_region=US" for 127.0.0.1 at 2012-08-13 23:20:10 -0700
Processing by OrdersController#subregion_options as HTML
  Parameters: {"parent_region"=>"US"}
  Rendered orders/_subregion_select.html.erb (3.0ms)
Completed 200 OK in 5ms (Views: 4.6ms | ActiveRecord: 0.0ms)
4

1 に答える 1

1

その理由は、のルートroutes.rbが表示される順序で定義されているためです。を書くと、コントローラーのアクションに一致するresources :ordersルートが暗黙的に作成されるため、 railsに移動すると、と解釈され、エラーが発生します。GET /orders/:idshoworders/orders/subregion_optionssubregion_optionsid

2番目のバージョンでは、順序を変更するため、リソースルートが定義されるにアクションに/orders/subregion_options正しく一致します。そのため、2番目のバージョンは機能し、最初のバージョンは機能しません。subregion_options

ちなみに、これはそのルートを定義するためのよりクリーンな方法です。

resources :orders do
  collection do
    get 'subregion_options'
  end
end
于 2012-08-14T06:54:15.653 に答える