mazinlabsのブログ

RubyとかCloudとかその辺の記事を書いたり書かなかったり

本日の教訓

ActiveRecordを継承したモデルで#saveでも#save!でもデータが保存できなくなる自体に陥った。


で、1時間ぐらい格闘した結果、原因判明。


ActiveRecord継承したモデルを作った際に、モデルの内部でcreateとかupdateのメソッドを実装すると、
既存のcreateやupdateのメソッドがオーバーライドされてDBにデータが保存できなくなるらしい。

  1 # coding: utf-8
  2 
  3 class Book < ActiveRecord::Base
  4   attr_accessible :price, :title
  5   
  6   def create
  7     # 宣言をするとデータが保存できなくなる
  8   end
  9   
 10   def update
 11     # 宣言をするとデータが保存できなくなる
 12   end
 13 end

みんな気をつけろよ!


ちなみにsuper()でオーバライドするメソッドが呼び出せるので、次のようにすれば解決できる気がしなくもない(未検証)

  1 # coding: utf-8
  2 
  3 class Book < ActiveRecord::Base
  4   attr_accessible :price, :title
  5   
  6   def create
  7     # super()を呼ぶとオーバーライドしたメソッドが呼び出される
  8     super()
  9   end
 10   
 11   def update
 12     # super()を呼ぶとオーバーライドしたメソッドが呼び出される
 13     super()
 14   end
 15 end

まぁ、おとなしくメソッド名を変えるのが吉かな。。。