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は同じですが、エラーはスローされず、line_itemsがデータベースに追加されます。請求書が既存のレコードである場合、検証は機能します。

アイデア?これはバグですか?不正なデータを防ぐために

私は、次のインデックスを追加したが、適切なレールの検証

add_index :line_items, [ :employee_id, :line_itemable_type, :line_itemable_id ], :unique => true, :name => 'index_line_item_employee_id' 
+0

これを解明したことがありますか?私はちょうど同じ問題に遭遇した。 line_itemable_idがまだ埋め込まれておらず、ゼロでないため、検証が失敗しないようです。 –

答えて

0

がしたい私はあなたがやったとおりにコーディングしたいが、私はこれを回避するために見つける唯一の方法でしょうInvoiceクラスにカスタム検証を書くことでした。この解決策は、問題のあるフィールドが強調表示されないという欠点を有する。

関連する問題