class AnyPresenceValidator < ActiveModel::Validator
def validate(record)
unless options[:fields].any?{|attr| record[attr].present?}
record.errors.add(:base, :blank)
end
end
end
class MyModel < ActiveRecord::Base
validate do |my_model|
my_model.my_validation
end
def my_validation
errors.add_to_base("Your error message") if self.blank?
#or self.attributes.blank? - not sure
end
end
6条答案
按热度按时间mwkjh3gx1#
您可以用途:
编辑:根据评论从Rails 3+的原始答案更新。
您可以使用
Model.content_columns.map(&:name)
获取模型的所有内容列,但它也将包括created_at
和updated_at
列,这可能不是您想要的。ff29svar2#
下面是一个可重复使用的版本:
您可以在模型中将其用于:
hsgswve43#
将
validate
方法添加到模型中:r7knjye24#
我认为以下方法可能有效
bogh5gae5#
下面是@Votya的正确答案,它可以检索created_at和updated_at之外的所有列(也可以选择丢弃其他列):
例如:
1wnzp6jl6#
如果您只有两个字段,这将完成工作:
这对于更多的字段来说不能很好地扩展,但是当您只有两个字段时,这可能比自定义验证方法更清楚。
注意:如果它们都省略了,错误信息会比你想要的更严格。(例如
First Name is required. Nick Name is required.
)¯*()*/¯