Help us understand the problem. What is going on with this article?

and returnを使うときの注意点

More than 5 years have passed since last update.

renderredirect toを複数用いるときの注意点

if home.nil?
  render :action => "new"
else
  render layout: 'new/mobile/default_no_footer'
end

としてしまうと

An AbstractController::DoubleRenderError occurred in

と怒られてしまいます、なのでここで使用するのがand return

if home.nil?
  render :action => "new" and return
else
  render layout: 'new/mobile/default_no_footer' and return
end

もちろんreturnでも大丈夫です。

if home.nil?
  render :action => "new" 
  return
else
  render layout: 'new/mobile/default_no_footer' 
  return
end

renderを複数使用する際の注意点として、renderを複数回呼び出すとエラーになるため、条件分岐した後「and return」で明示的に終了させる。renderに関するレファレンスにも書いてあります

慣れてきたりすると、行数を使いたくないので

render :action => "index"  and return unless if @user.nil?

のようにスマートに書いたりします。
ここまではエラーが出てからでもなんとなくわかるのですが。。。

一瞬???てなったときがあったのでメモしておきます。

self.render_404 and return if @hogehoge.blank? 
@client = Client.find_by_id(params[:client_id])  
render layout: 'new/mobile/default_no_footer' if @user

みたいに書き、ロジックが走るとエラーが出ます。

An AbstractController::DoubleRenderError occurred in  ・・・・・・

あれ?これを防ぐためにand returnを書いたのになと思ったのですが出てるもんは仕方ないのでとりあえず前にifを出して普通に書いてみたら・・・エラーが出ないで直った。

なんでかわからなかったので調べてみたらありました!!

and returnを使用できるとき

エラーが出ている文をよくみてみると、要するにrenderの戻り値がたまたま true なのを利用して、 and で受けて次の文を書いているだけっぽいです。なので万が一 falsenil を返してきたら return は実行されないということらしい。

今後、注意していきたいものです。

katsuyuki
4月から4年目をむかえました
http://katsuyukikun.hatenablog.com/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした