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
原因がわかってしまえば単純なんですが今回は長い時間ハマってしまいました。悔しい。