2017-01-05 9 views
0

コントローラのデフォルトアクションがどこに定義されているのだろうか。インデックスアクションを記述しなくても、インデックスビューをレンダリングすることができます!私はレールのソースコードを読んでいましたが、メソッドが宣言している場所に移動できます。私はその行動が経路によって知られていると思う。誰もが私がレールのソースコードでそれらを見つけることができる場所を知っています。Railsコントローラアクション

+0

あなたはRESTfulなリソースを扱っていると思いますので、RailsはURLを認識し、インデックスアクションをレンダリングすることを知っています。インデックスアクションを定義していないにもかかわらず、コンベンションオーバーのコンベンションが勝利します。なぜこれを知る必要がありますか? –

+0

これはレールがどのように処理するのかを知る必要があります。 – Daniel

+0

railsがコントローラ内でインデックスアクションなしでインデックスアクションをレンダリングするのは、それが(通常は 'resources:users')と一致するルートを宣言し、レンダリングするインデックステンプレートがあるからです。これらの2つがなければ、レールはエラーを発生させます。 – jvnill

答えて

1

あなたはアクション名を定義さえせずにテンプレートがある場合には、デフォルトのレンダリング呼び出しますrails/actionpack/lib/action_controller/metal/implicit_render.rb

def method_for_action(action_name) 
    super || if template_exists?(action_name.to_s, _prefixes) 
    "default_render" 
    end 
end 

Railsの中で見ることができました。

+0

テンプレートレンダリングではなく、アクションが定義されている場所を知る必要があります。 – Daniel

+0

アクションが定義されていません。 上記のメソッドの本文からわかるように、インデックスアクションを記述しなくても、インデックス用のビューテンプレートがある限り、Railsは 'default_render'メソッドを使ってうまくレンダリングします。 – xuanduc987

関連する問題