0

Rails Guidesの「Rails Routing From The Outside In」セクションを確認していて、このセクションに出くわしました。

クライアントが常に ID を参照せずに検索するリソースがある場合があります。たとえば、現在ログインしているユーザーのプロファイルを常に /profile に表示したいとします。この場合、単一のリソースを使用して、(/profile/:id ではなく) /profile を show アクションにマップできます。

get 'profile', to: 'users#show'

一致する文字列を渡すと controller#action 形式が期待されますが、Symbol を渡すとアクションに直接マップされます。

get 'profile', to: :show

ガイドには、「シンボルを渡すとアクションに直接マップされる」と書かれていますが、それぞれ「表示」アクションを持つ複数のコントローラーがあるとします。特定のコントローラーを参照しなくなったので、Rails はどのコントローラーを使用するかをどのように判断しますか?

4

2 に答える 2

2

どうやら知らないらしい…。

#config/routes.rb

get 'profile', to: :show

コンソールから:

$ rake routes
rake aborted
missing :controller

最初の例: 'users#show' は、成功したルートを作成します。

get 'profile', to: :show, controller: 'users'
于 2013-11-09T21:24:59.573 に答える
2

そのドキュメンテーションはやや誤解を招きやすいですね。悪い例です。一致するシンボルを渡すことに関するコメントは一般的なコメントであり、単一のリソースに関するセクションの外にある必要があります。

実際、スタンドアロンで試してみると、Rails の起動時または実行時に次のエラーが発生しますrake routes

rake routes
rake aborted!
missing :controller

:controllerそのため、リソース宣言の外で機能するようにオプションを追加する必要があります。

get 'profile', to: :show, controller: 'users'

それらが指定する構文は、resourcesorresource宣言内で有効です。たとえば、次のようになります。

resources :user do
  collection do
    get 'profile', to: :show
  end
end

また

resource :user do
  get 'profile', to: :show
end

ただし、これらの例は両方とも、前の例とは異なるルートを生成します。繰り返しますが、コメントは間違っていると思います。

于 2013-11-09T21:34:56.160 に答える