我对Rails验证相当新。我有一个Activity模型,它有许多属性(在下面的attributes数组中列出)。我需要验证每个活动都有一个名称和至少一个其他属性。我想到了类似下面的东西,但它看起来有点乱。有什么建议吗?
class Activity < ActiveRecord::Base
belongs_to :user
validate :valid_activity
def valid_activity
attributes = [reps, distance, meal, post_meal, yoga, reminder, duration]
if name.present? && self.include? (activity)
end
end
end
答案 0 :(得分:0)
你会创建一个像这样的新验证器类
class ActivityValidator < ActiveModel::Validator
def valid_activity
attributes = [:reps, :distance, :meal, :post_meal, :yoga, :reminder, :duration]
unless name.present? && attributes.any?{ |a| self.activity == a }
errors[:user] << 'Need to add an activity'
end
end
端
然后在user.rb
文件中,包含验证器模块并使用validates_with
方法。
include ActiveModel::Validations
validates_with ActivityValidator