关于validates()方法的一个简单问题。当你在模型中使用它时,有没有办法写它们以尽可能少地使用行?
示例说这是我的模型
class Items < ActiveRecord::Base
validates :title, :price, presence: true
end
并且说我想为价格增加数字性和标题的单一性。
有没有办法在一行上写,而不是
validate :title, uniqueness: true
validate :price, numericality: {greater_or_equal_to: 0.01}
希望这个问题有道理。
答案 0 :(得分:1)
您可以在一行上组织多个共享相同验证的属性
validates :foo, :bar, presence: true
validates :x, :y, numericality: { allow_blank: true }
这对我很有用。在我的工作中处理20多列的表格并不罕见,在一行代码中查看所有这些将是一场噩梦。您可以编写一个自定义验证方法来尝试将事情放在一行,但我认为这不值得付出努力。 IE
validate :custom_method
其次是:
def custom_method
errors.add(:foo, 'must have value') if self.foo.nil? ; errors.add(:bar, 'must have value') if self.bar.nil?
end
我希望这说明为什么从长远来看接受额外的行可能没问题。
修改强>
如果您要执行以下操作,Rails似乎没有抱怨:
validates :foo, length: { maximum: 12 }, presence: true ; validates :bar, length: { maximum: 40 }