模型用法中的validates()方法

时间:2015-03-27 18:09:47

标签: ruby-on-rails validation ruby-on-rails-4 model

关于validates()方法的一个简单问题。当你在模型中使用它时,有没有办法写它们以尽可能少地使用行?

示例说这是我的模型

class Items < ActiveRecord::Base
  validates :title, :price, presence: true
end

并且说我想为价格增加数字性和标题的单一性。

有没有办法在一行上写,而不是

validate :title, uniqueness: true
validate :price, numericality: {greater_or_equal_to: 0.01}

希望这个问题有道理。

1 个答案:

答案 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 }