rails で transaction内でnextしたらtransactionブロックを抜けただけだった話
タイトルが結論なんですが、つんだ話。
Railsで、
[1,2,3].each do |i| Hoge.transaction do 何らかの処理 next if Hoge.huga end p i end
みたいなのを書いたとして、
例が適当すぎるけど、要はfor文の中に、transactionを書いて、
transaction内の処理の内容によっては、その後の処理をskipして次に行きたい場合ってのがあったんだけども、その場合にnextが効かないことに気づいた。
transactionはブロックなので、ここでかくnextはブロックを抜けてしまうっぽい。
nextで飛ばされるはずの、transactionブロック後のp i が実行されて、あれ?ってなって気づいた。
ブロックとクロージャーについて詳しく書いてある記事にお世話になった
Rubyの動かないコード (初級編) ブロックとクロージャの性質 - 主に言語とシステム開発に関して