1

私は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_idで同じsale_itemを2回作成できないようにするにはどうすればよいですか?

私が試してみました:

has_many :sale_items, uniq: true

しかし、うまくいきませんでした、私も試しました:

validates_uniqueness_of :sale_item_ids

しかし、成功しません。

4

2 に答える 2

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 に答える