2
鑑於以下型號:的Rails 3.1驗證嵌套屬性的唯一性態關聯
##Invoice.rb
has_many :line_items, :as => :line_itemable
accepts_nested_attributes_for :line_items
##LineItem.rb
belongs_to :line_itemable, :polymorphic => true
validates :employee_id, :presence => true, :uniqueness => { :scope => [ :line_itemable_id, :line_itemable_type ] }
我怎麼會去驗證了以下新的發票
i = Invoice.new
i.line_items << [ LineItem.new(:employee_id => 1), LineItem.new(:employee_id => 1) ]
i.valid?
發票不應該是有效的,因爲line_items employee_id's是相同的,但沒有錯誤發生,line_items被添加到數據庫中。如果發票是現有記錄,則驗證確實有效。
任何想法?這是一個錯誤?
爲了防止壞的數據我已經添加了以下索引,但想有正確的軌道驗證
add_index :line_items, [ :employee_id, :line_itemable_type, :line_itemable_id ], :unique => true, :name => 'index_line_item_employee_id'
有沒有想過這個?我遇到了同樣的問題。這似乎是因爲line_itemable_id尚未填充且爲零,驗證不會失敗。 –