2011-08-08 5 views
1

私のモデルにこのコードがありますが、期待どおりに動作していないものがあります。アクティブなレコードとbefore_saveフィルタの問題

before_save :destroy_image?, :no_spaces_in_telephone 

    def no_spaces_in_telephone 
    self.phone.gsub! /\s+/, 'XXX' 
    ABLog "Telefono", self.phone 
    end 

    def ABLog tag, string 
    logger.info "\n\n#### #{tag} : \n " + string.to_s + "\n\n" 
    end 

ログは空白の代わりに「XXX」との電話を印刷しますが、私のレコードが更新されない、と電話がその場所にあるすべてのwithesのペースで、同じまま。

私は間違っていますか?

+2

私はまだgsubの復帰をself.phoneに一致させる必要があると思います。 self.phone = self.phone.gsub!() – corroded

答えて

2
def no_spaces_in_telephone 
    self.phone = self.phone.gsub /\s+/, 'XXX' 
    ABLog "Telefono", self.phone 
end 

これは、self.phone =がメソッドであるためです。

+1

まあ、すべてのアクセサはメソッドです。しかし、この場合、アクティブレコードに変更を認識させる必要があります。これは属性を設定することの副作用です。属性がインプレースで変更されても、そのアイデンティティーは変更されない場合は、通知されません。 –

関連する問題