2011-07-22 145 views
0

我想在我的模型添加验证,我有2个字段:数据库模型验证

t.boolean :first 
t.boolean :second 

我想确保当

first field is false 

然后

second field is always false 

是那可能吗?

回答

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 

编辑:忘了提,这个例子是Railscasts:http://railscasts.com/episodes/211-validations-in-rails-3如果您需要更详细关于此主题的信息

+0

使用新类而不是像所有其他人所建议的方法的优点是什么? – glarkou

+0

类可重复使用且更易读,其他解决方案将导致复制粘贴(最终)。 – Zepplock

1

我在这里假设,当firsttrue,它总是没问题。

validate :check_booleans 

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

验证不检查返回值,您需要添加e “self.errors.add(:second,”can not be 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