deb*_*deb 28 validation ruby-on-rails models
我知道我可以通过添加validates_presence_of :field到模型来要求字段.但是,如何要求至少一个字段是强制性的,而不需要任何特定字段?
提前致谢
- Deb
Voy*_*yta 30
您可以使用:
validate :any_present?
def any_present?
if %w(field1 field2 field3).all?{|attr| self[attr].blank?}
errors.add :base, "Error message"
end
end
Run Code Online (Sandbox Code Playgroud)
编辑:根据评论更新Rails 3+的原始答案.
但您必须手动提供字段名称.您可以获取模型的所有内容列Model.content_columns.map(&:name),但它也将包括列created_at和updated_at列,这可能不是您想要的.
这是一个可重用的版本:
class AnyPresenceValidator < ActiveModel::Validator
def validate(record)
unless options[:fields].any?{|attr| record[attr].present?}
record.errors.add(:base, :blank)
end
end
end
Run Code Online (Sandbox Code Playgroud)
您可以在模型中使用它:
validates_with AnyPresenceValidator, fields: %w(field1 field2 field3)
Run Code Online (Sandbox Code Playgroud)
validate在模型中添加方法:
def validate
if field1.blank? and field2.blank? and field3.blank? # ...
errors.add_to_base("You must fill in at least one field")
end
end
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
10222 次 |
| 最近记录: |