Rails自定义验证方法

时间:2015-03-06 20:47:39

标签: ruby-on-rails ruby rails-activerecord

我对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

1 个答案:

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