renderメソッド
レンダリングは、コントローラーのアクションがrenderメソッドを使用してビューの出力を指示する作業である。renderメソッドは、ビューテンプレートを呼び出し、それをもとにHTMLを生成する。
コントローラーのアクションとビュー呼び出し
renderメソッドは必ずしもコントローラーのアクション内で明示的に記述する必要はない。renderメソッドを指示しない場合でも、Railsでは規約に従って暗黙的にViewメソッドを動作させることができる。
以下の4つの条件に該当する場合は、renderメソッドを明示的に指示しなくても問題はない。
1.ルートで呼び出されたアクションがコントローラー内にない
2.ルートで呼び出されたアクション内にrenderメソッドがない(ただし、redirect_toメソッドがある場合は除く)
3.ルートで呼び出されたアクション内のrenderメソッドにビュー名を指定する引数がない
4.ルートで呼び出されたアクション内のrenderメソッドのビュー名がアクション名と同じ
その場合、Railsは指示されたアクション名に相当するerbファイルを探し出し、そのrenderメソッドを暗黙的に実行する。
例えば、Userコントローラーのshowアクションであれば、view/users/show.html.erbがビューテンプレートとして使用される。
任意のビューをレンダリング
renderで明示的にビューを指定すると、指定されたビューが表示される。その際に、もし他のコントローラーに関係するビューを呼び出す場合は、viewsディレクトリ内のそのコントローラー名を持つディレクトリから、viewsを起点にした相対パス名を指示する必要がある。
- 同じコントローラー内に関連するビューを表示させる時
def index
render 'users_list'
end
とすると同じコントローラー内のlistアクションに対応するviewファイル(views/users/user_list.html.erb)を表示させる。
- 違うコントローラー内に関連するビューを表示させる時
def index
render 'photos/photo_list'
end
とすると違うコントローラー内のlistアクションに対応するviewファイル(views/photos/photo_list.html.erb)を表示させる。
redirect_toメソッド
redirect_toメソッドは、コントローラー内のアクション内で使用する、アクション実行後に他のルートへリダイレクトを行うためのメソッドである。新たなHTTPリクエストをサーバーに送り、コントローラーのアクションが実行される。
redirect_toの引数に外部URLを渡すことで、他のサーバーを宛先にリダイレクトすることもできる。
redirect_to 'http://www.examle.com'