1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

renderとredirect

Posted at

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を起点にした相対パス名を指示する必要がある。

  • 同じコントローラー内に関連するビューを表示させる時
users_contoroller.rb
def index
  render 'users_list'
end

とすると同じコントローラー内のlistアクションに対応するviewファイル(views/users/user_list.html.erb)を表示させる。

  • 違うコントローラー内に関連するビューを表示させる時
users_contoroller.rb
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'
1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?