2013-11-22 13 views
6

特定のアクションのルートを定義し、リンクを作成しました。対応するビューも作成しましたが、コントローラアクションメソッドを定義するコードは作成しませんでした。それでもリンクをクリックするとビューがレンダリングされます。つまり、実際に表示されているアクションは表示されません。rails 3レンダリングビュー(アクションなし)

説明はありますか?

答えて

5

はい、対応するアクションが存在しない場合でもビューはレンダリングされますが、ルートは同じものとして定義されているため動作します。しかし、これは良い習慣ではありません!

+1

次に、未定義のアクションエラーがトリガされるのはいつですか?対応するビューが存在しない場合のみ?? – AshwinKumarS

+3

@RSB、これは静的ページをレンダリングしようとするときに便利です – Virtual

+2

未定義のアクションエラーは、ページが静的でない場合に発生します。私は@Virtual – RSB

1

config/routes.rbファイルのすべてのルートに対してコントローラのアクションを定義するとは限りません。あなたはおそらく、あなたがアクションを定義し、またそのように空にそれを残すことができます知っているように:任意のWebアプリケーションの

class PostsController < ApplicationController 

    def index 
    end 

end 

それはインスタンス変数、データベーストランザクションなどの意志のためのコードとして、このように滞在することは珍しいだろう最終的にコントローラの動作のほとんどを占めます。純粋な静的ページの場合、アクションは定義する必要がありますが、空である必要があります。

3

Railsでビューをレンダリングするには、コントローラ(対応するメソッドではない)、ビューとビューを参照するルートを定義する必要があります。コントローラにメソッドを追加する必要があるのは、ビューにデータを提供する必要がある場合だけです。

本のかなり完全な説明は、あなたがそのアクションのためのフィルタを定義した場合でも、それもかかわらず、あなたがアクションを定義しているかどうかにない実行され、グレンは自動的に彼のリンクを介してレールを述べたようにhttp://guides.rubyonrails.org/layouts_and_rendering.html#rendering-by-default-convention-over-configuration-in-action

0

にありますコントローラの名前と同じ名前のフォルダ内のアクションと同じ名前のビューを表示します(これはviewsフォルダ内にあります)。

空のアクションは、何もしないのと同じですが、何らかの理由で(わかりやすく保守性のような)アクションを定義することです。

参考:ここでは、このlinkでRailsはデフォルトでnew.html.erbビューをレンダリングするので、 アクションは特に指定されていない限り、上記の例から、空のメソッドが うまく働くだろうと

注意が言います

したがって、デフォルトの応答を変更する必要がある場合に備えて、明示的なHTTP応答が定義されます。

関連する問題