2011-07-22 5 views

答えて

2

あなたはRails3でこのような何かを行うことができます。

class MyValidator < ActiveModel::EachValidator 
    def validate_each(object, attribute, value) 
    unless {your condition here} 
     object.errors[attribute] << (options[:message] || "your error here") 
    end 
    end 
end 

編集を:場合http://railscasts.com/episodes/211-validations-in-rails-3あなたはより詳細な必要があります。この例ではRailscastsからのものであることを言及するのを忘れましたこのトピックの情報

+0

他のすべてのメソッドと同様に、メソッドの代わりに新しいクラスを使用する利点は何ですか? – glarkou

+0

クラスは再利用可能で読みやすく、他の解決方法はコピー貼り付けにつながります(結局)。 – Zepplock

1

ここでは、firsttrueの場合、それは常にOKです。

validate :check_booleans 

def check_booleans 
    if first == false 
    errors[:base] << "wrong here" if second == true 
    end 
end 
+1

検証は戻り値をチェックしません。eを追加する必要がありますオブジェクトのエラー: 'self.errors.add(:second、" falseにすることはできません ")' –

+0

@Brett Bender:あなたは間違いなく正しいと思います – apneadiving

2
validate :if_first_is_false_second_is_also 
def if_first_is_false_second_is_also 
    if self.first_field == false && self.second_field != false 
    errors.add(:second_field, "your error message") 
    end 
end 

More on validations

+0

あなたは条件が間違った方法を理解していると思います – apneadiving

+0

これは動作しますか? Rails 3も同様ですか? – glarkou

+0

はい、条件が間違っていますが、修正できます。 – glarkou

関連する問題