2017-01-13 13 views
2

4:一意性検証レール、私は私のモデルでは、この一意性の検証持っ

validates_uniqueness_of :source_id, 
          scope: [:year_id], 
          conditions: -> { where(comment_type_id: CommentType.final.id) }, 
          message: %(
          There can be only one final comment per year 
         ) 

は、私がコメントの2種類がありますが、解説テーブルに何度も追加することができる「CommentType.internal」、および「CommentType .final 'は一度保存することができますが、更新アクションによって変更することができます。

最後のcomment_type_idで1つのレコードを保存できますが、どのcommentary_type_idに関係なく別のレコードを作成したい場合は、この一意性検証ではまだ失敗します。

私は間違っていますか?

+0

を、希望するIDを返しますCommentType.final.id' 'よろしいです?私はあなたに役立つより多くの情報が必要なように感じます..それは正しいと思われる検証を見てください。 –

+0

@RafaelCostaはい私はログを観察すると、常に同じIDを照会します。試してハードコードしてみましょう。 –

答えて

2

これは私のために働いた、私は同じ問題が直面誰のために答えるでしょう:

validates_uniqueness_of :comment_type_id, 
          scope: [:year_id, :source_id], 
          if: ->(cmt) { cmt.comment_type_id == CommentType.final.id) }, 
          message: %(
          There can be only one final comment per year 
         ) 
関連する問題