1

我有 2 个模型:

销售:

class Sale < ActiveRecord::Base

  attr_accessible :sale_item_ids, :subtotal, :tax_charge, :total

  has_many :sale_items

end

销售项目:

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

但没有成功。

4

2 回答 2

1

我相信你必须确定它的范围。http://apidock.com/rails/ActiveRecord/Validations/ClassMethods/validates_uniqueness_of 试试这个:

validates_uniqueness_of :sale_items_ids, :scope => :sale_id

于 2013-02-11T19:17:52.467 回答
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
于 2013-02-11T22:52:57.577 回答