特定のアクションのルートを定義し、リンクを作成しました。対応するビューも作成しましたが、コントローラアクションメソッドを定義するコードは作成しませんでした。それでもリンクをクリックするとビューがレンダリングされます。つまり、実際に表示されているアクションは表示されません。rails 3レンダリングビュー(アクションなし)
説明はありますか?
特定のアクションのルートを定義し、リンクを作成しました。対応するビューも作成しましたが、コントローラアクションメソッドを定義するコードは作成しませんでした。それでもリンクをクリックするとビューがレンダリングされます。つまり、実際に表示されているアクションは表示されません。rails 3レンダリングビュー(アクションなし)
説明はありますか?
はい、対応するアクションが存在しない場合でもビューはレンダリングされますが、ルートは同じものとして定義されているため動作します。しかし、これは良い習慣ではありません!
config/routes.rb
ファイルのすべてのルートに対してコントローラのアクションを定義するとは限りません。あなたはおそらく、あなたがアクションを定義し、またそのように空にそれを残すことができます知っているように:任意のWebアプリケーションの
class PostsController < ApplicationController
def index
end
end
それはインスタンス変数、データベーストランザクションなどの意志のためのコードとして、このように滞在することは珍しいだろう最終的にコントローラの動作のほとんどを占めます。純粋な静的ページの場合、アクションは定義する必要がありますが、空である必要があります。
Railsでビューをレンダリングするには、コントローラ(対応するメソッドではない)、ビューとビューを参照するルートを定義する必要があります。コントローラにメソッドを追加する必要があるのは、ビューにデータを提供する必要がある場合だけです。
本のかなり完全な説明は、あなたがそのアクションのためのフィルタを定義した場合でも、それもかかわらず、あなたがアクションを定義しているかどうかにない実行され、グレンは自動的に彼のリンクを介してレールを述べたようにhttp://guides.rubyonrails.org/layouts_and_rendering.html#rendering-by-default-convention-over-configuration-in-action
にありますコントローラの名前と同じ名前のフォルダ内のアクションと同じ名前のビューを表示します(これはviewsフォルダ内にあります)。
空のアクションは、何もしないのと同じですが、何らかの理由で(わかりやすく保守性のような)アクションを定義することです。
参考:ここでは、このlinkでRailsはデフォルトでnew.html.erbビューをレンダリングするので、 アクションは特に指定されていない限り、上記の例から、空のメソッドが うまく働くだろうと
注意が言います
したがって、デフォルトの応答を変更する必要がある場合に備えて、明示的なHTTP応答が定義されます。
次に、未定義のアクションエラーがトリガされるのはいつですか?対応するビューが存在しない場合のみ?? – AshwinKumarS
@RSB、これは静的ページをレンダリングしようとするときに便利です – Virtual
未定義のアクションエラーは、ページが静的でない場合に発生します。私は@Virtual – RSB