rails无法计算验证关联

时间:2015-06-22 10:43:15

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

假设我有一个这样的模型:

class Taskable < ActiveRecord::Base
  has_many :deliveries
  has_many :packages
  has_many :supplies

  validate :can_have_only_one_type_of_association

private

  def can_have_only_one_type_of_association
    unless [deliveries, packages, supplies].count(:any?) <= 1
      errors.add(:base, :can_have_only_one_type_of_association) # becomes invalid if at least two associations present
    end
  end
end

该模型具有验证方法can_have_only_one_type_of_association。但是,如果我为少数协会创建一个元素,我仍然有有效的记录。

taskable = Taskable.create(taskable_params)
taskable.supplies << Supply.create(supply_params)
taskable.deliveries << Delivery.create(delivery_params)
taskable.reload
taskable.supplies.count # => 1
taskable.deliveries.count # => 1
taskable.valid? # => true (should be false)

似乎activerecord在某处缓存这些方法。我怎样才能避免这种不可预测的行为?

1 个答案:

答案 0 :(得分:1)

这个查询似乎有问题:

unless [deliveries, packages, supplies].count(:any?) <= 1

也许它应该有&amp;?

unless [deliveries, packages, supplies].count(&:any?) <= 1

在我的控制台中工作。