我有2个型号:
出售:
class Sale < ActiveRecord::Base
attr_accessible :sale_item_ids, :subtotal, :tax_charge, :total
has_many :sale_items
end
SaleItem:
class SaleItem < ActiveRecord::Base
attr_accessible :discount, :price, :product, :quantity, :sale_id, :sum, :code
belongs_to :sale
end
首先我创建一个空的销售,然后我开始将sale_items添加到该销售中。
如何验证sale_item_ids列的唯一性?我的意思是,我怎么能这样做同样的sale_item不能用相同的sale_id创建两次?
我试过了:
has_many :sale_items, uniq: true
但没有用,我也试过了:
validates_uniqueness_of :sale_item_ids
但没有成功。
答案 0 :(得分:1)
我相信你必须考虑范围。 http://apidock.com/rails/ActiveRecord/Validations/ClassMethods/validates_uniqueness_of 试试这个:
validates_uniqueness_of :sale_items_ids, :scope => :sale_id
答案 1 :(得分:0)
我从一开始就错了,sale_item_ids总是会有所不同,因为它是数据库中的新记录,所以它总是唯一的。
所以我所做的就是验证其他一些专栏。
class SaleItem < ActiveRecord::Base
validate :check_presence, :on => :create
attr_accessible :code, :discount, :price, :product, :quantity, :sum, :sale_id
belongs_to :sale
def check_presence
# Get the sale where the item sale will be saved
sale = Sale.find(self.sale_id)
# Compare the code column
sale.sale_items.each do |s|
if s.code == self.code
errors.add(:base, "Item already in the sale form.")
end
end
end
end