rails 无法计算关联验证
rails can't count association on validation
假设我有一个这样的模型:
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 似乎在某处缓存了这些方法。我怎样才能避免这种不可预测的行为?
这个查询似乎有问题:
unless [deliveries, packages, supplies].count(:any?) <= 1
也许它应该有 &?
unless [deliveries, packages, supplies].count(&:any?) <= 1
在我的控制台中工作。
假设我有一个这样的模型:
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 似乎在某处缓存了这些方法。我怎样才能避免这种不可预测的行为?
这个查询似乎有问题:
unless [deliveries, packages, supplies].count(:any?) <= 1
也许它应该有 &?
unless [deliveries, packages, supplies].count(&:any?) <= 1
在我的控制台中工作。