Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
72
Help us understand the problem. What is going on with this article?
@katsuyuki

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 は実行されないということらしい。

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

72
Help us understand the problem. What is going on with this article?
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
katsuyuki
4月から4年目をむかえました

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
72
Help us understand the problem. What is going on with this article?