Rails has_many belongs_to unique

时间:2013-02-11 18:03:12

标签: ruby-on-rails-3

我有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

但没有成功。

2 个答案:

答案 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