10
10

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 5 years have passed since last update.

Railsのbefore_saveでハマった話

Last updated at Posted at 2015-08-18

modelのbefore_actionでbool型の値を代入して更新するというコード。

mode.rb
before_save do
	self.closed = false
end

ですが、いくら更新しても更新に失敗してしまう。
rails consoleで実行してみると以下の様な感じ。

irb(main):004:0> e = Event.first
irb(main):009:0> e.closed = true
=> true
irb(main):010:0> e.save
   (0.5ms)  BEGIN
   (0.2ms)  ROLLBACK
=> false

エラーも吐かれないし何が原因なんだろうと数時間悩んでしまったのですが。。
問題は先程のbefore_saveでした。

event.rb
before_save do
	self.closed = false
end

self.closedにfalseを代入した際の値がfalseになっており、before_saveメソッドがそのままfalseを返して、以降の更新処理がRollbackされていたのでした。
falseを返さなければ良いのでselfを返すようにしたところ問題なく更新できるようになりました。

event.rb
before_save do
	self.closed = false
	self
end

原因がわかってしまえば単純なんですが今回は長い時間ハマってしまいました。悔しい。

10
10
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
10
10

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?