どのように動作するのか誰にでも分かります。どのようにRailsがActiveRecordインスタンスに使用する名前付きルートヘルパーを決定するのですか?
私はRails 5.0.0.1プロジェクトで作業しています。実用上の理由から、我々は我々はそれに応じてQuestion
とAnswer
モデルを持っている
namespace :survey do
resources :questions
resources :answers
end
のような名前空間のルートを使用しています。
documentationヘルパーlink_to
は単にビュー(HAML)単純な書き込みに私の場合を意味する第二パラメータとして以下をActiveRecordのインスタンスを渡すと共に使用することができることを、伝え:
= link_to 'Show question', @question
名前空間が存在しないにもかかわらず、名前付きヘルパーメソッドquestion_path
の場合は、ルートが名前空間になっていても、これはsurvey_question_path
の代わりになります。ポイントは、私がに、を使用するようにroute helperという名前のActiveRecordインスタンスから決定したいということです。
興味深いのは、質問インスタンスがの質問 _pathのような名前付きルートを持つことをRailsが認識しているということです。
は、私がこれまでのところ考え出した:link_to
の2番目のパラメータは、適切な(またはしない)という名前のルートヘルパーを選択するヘルパーメソッドurl_for
を、使用しています
- - しかし、どのように?
- ActiveRecordインスタンスには、
route_key
(複数)とsingular_route_key
のような属性を含むmodel_name
というメソッドがあります。これが私が探しているものと何か関係があるかどうか、またはそれを上書きする方法があるかどうかはわかりません。
私は別のビューディレクトリからアクションをレンダリングするためにrender @question
ためto_partial_path
、またはコントローラの場合はself.controller_path
のようなモデルで上書きするための簡単な方法があったと思ったが、私はそれを見つけることができません。
ご協力いただければ幸いです。 (Active Record
のような)レコードを渡す
の代わりに、ハッシュ:
EDIT
私は(という名前のルートに頼る)APIdockに次の段落につまずいグーグルいくつかのより多くをした後、 optionsパラメータはそのレコードの名前付きルートをトリガーします。ルックアップはクラス名で行われます。したがって、Workshopオブジェクトを渡すと、
workshop_path
ルートを使用しようとします。admin_workshop_path
などのネストされたルートがある場合は、明示的に呼び出す必要があります(url_for
がそのルートを推測することは不可能です)。
ええ、ヘルパーとしては、私はそれを考えましたが、アイデアが好きではない...(私の悪い:-))。一方、あなたの2番目の提案は、配列の中で、私の問題THXを解決するようです( 'model_name'に関しては、私はそれを上書きするつもりはなかった、route_key attribええ、私はあなたが正しいと思う...) – Misu