我有这个型号:
class Ofert < ActiveRecord::Base
has_many :shipping_fees
end
class ShippingFee < ActiveRecord::Base
belongs_to :ofert
end
ShippingFee
有一个属性city
。我想验证用户是否为同一个Ofert
我已经让它像这样工作:
class ShippingFee < ActiveRecord::Base
belongs_to :ofert
validate :not_reapeated_cities
def not_reapeated_cities
ofert = Ofert.find self.ofert_id
ofert.shipping_fees.each do |shipping_fee|
errors.add(:city, "has been already added") if shipping_fee.city == self.city
break if not errors.empty?
end
end
end
但是我认为有更好的方法,我想尽可能优化应用程序。当有很多ShippingFee
时,它对性能没有帮助。
答案 0 :(得分:1)
您可以使用scope
验证的uniqueness
选项,如下所示
validates_uniqueness_of :city, scope: :ofert_id
您还需要在unique index
表格中添加shipping_fees
,如下所示
add_index(:shipping_fees, [:city, :ofert_id], unique: true)