是否可以针对不同模型的数组值验证值?

时间:2014-02-17 13:55:51

标签: ruby-on-rails

我有一个名为Donation的模型,即belongs_to User

还有一个RemoteAccount模型,方法:donation_amounts,它返回一个可以接受的数字数组(例如[10, 25, 50, 100, 250, 500]

对于每个RemoteAccount,此数组都不同。

我需要确保提交给该用户的捐款在他的帐户可以接受的价值范围内。

这可能吗?

逻辑是这样的:

validates :amount, inclusion: { in: self.user.remote_account.donation_amounts }

(显然它不起作用,但你明白了)

3 个答案:

答案 0 :(得分:0)

您是否尝试过Custom Validator之类的内容?我认为这正是你所需要的。

class MyValidator < ActiveModel::Validator
  def validate(record)
    unless record.name.starts_with? 'X'
      record.errors[:name] << 'Need a name starting with X please!'
    end
  end
end

class Person
  include ActiveModel::Validations
  validates_with MyValidator
end

答案 1 :(得分:0)

您可以在模型类中创建自定义验证器,如下所示:

validate :check_values

def check_values
  # Here you do the custom check returning true or false
end

此处提供更多信息:http://edgeguides.rubyonrails.org/active_record_validations.html#custom-validators

答案 2 :(得分:0)

您可以使用proc来执行此操作。

validates :amount, inclusion: { in: proc { |record| record.user.remote_account.donation_amounts } }