2011-07-25 8 views
1

以下に示すように、1つの特定の列に対してbefore_validationをトリガーする方法を理解しようとしています。特定の列のbefore_validationトリガー

class PartType < ActiveRecord::Base 
    before_validation :fix_quotation 

    protected 
    def fix_quotation 
     self[:quotation] = quotation_before_type_cast.tr(' $, ' , '.') if attribute_names().include?("quotation") 
    end 
end 

この場合、attribute_namesは機能していないようです。

私はこのモデルに他のいくつかの列を持っています。他の列に変更を加えると、このバリデーションは非常に簡単です。

この検証は、「引用」欄で正常に動作しているが、私は変更の検証トリガすることを望んでいない「とは、例えばタイトルのコラムを

注:私はと呼ばれる宝石使用しています 『にon_the_spotを』 「その場で」編集列の値

答えて

2

はここにあなたのモデルが定義されるべき方法は次のとおりです!

class PartType < ActiveRecord::Base 
    before_validation :fix_quotation, :if => :quotation_changed? #this is where the magic happens 

    protected 
    def fix_quotation 
    self[:quotation] = quotation_before_type_cast.tr(' $, ' , '.') if attribute_names().include?("quotation") 
    end 
end 
+0

魅力のように動作し、非常にシンプルOBRIGADO MUITO、マウリシオ:-) –

関連する問題