我想在我的模型添加验证,我有2个字段:数据库模型验证
t.boolean :first
t.boolean :second
我想确保当
first field is false
然后
second field is always false
是那可能吗?
我想在我的模型添加验证,我有2个字段:数据库模型验证
t.boolean :first
t.boolean :second
我想确保当
first field is false
然后
second field is always false
是那可能吗?
你可以做这样的事情在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如果您需要更详细关于此主题的信息
我在这里假设,当first
是true
,它总是没问题。
validate :check_booleans
def check_booleans
if first == false
errors[:base] << "wrong here" if second == true
end
end
验证不检查返回值,您需要添加e “self.errors.add(:second,”can not be false“) –
@Brett Bender:你一定是对的,谢谢 – apneadiving
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
使用新类而不是像所有其他人所建议的方法的优点是什么? – glarkou
类可重复使用且更易读,其他解决方案将导致复制粘贴(最终)。 – Zepplock