0

Labellingsに属するものがEmailsありLabelsます。

各ラベルは、電子メールとラベルのペアに固有である必要があります。そのため、電子メールに「テスト」のラベルを付けることができるのは1回だけです。

私はこれをでやっていvalidates_uniqueness_of :label_id, :scope => :email_idます。これは期待どおりに機能します。

メールにラベルを付けるときに、一意のラベルを追加したいのですが、メールにすでにそのラベルが付けられている場合は何もしません。

次のようなものでアプリの検証機能を複製したくありません。

email.labels << label unless email.labels.include?(label)

手動でチェックしたり例外を処理したりせずに、各ラベリングに一意のemail_id / label_idペアがあることを確認することは可能ですか?

4

1 に答える 1

1

私はそれをテストしていませんが、おそらく次のよう<<に、アソシエーションプロキシでオーバーライドできます。

class Email < ActiveRecord::Base
  has_many :labelings
  has_many :labels, :through => :labelings do
    def <<(label)
      unless proxy_owner.labels.include?(label)
        proxy_owner.labelings << Labeling.new(:email => proxy_owner, :label => label)      
      end
    end
  end

end
于 2009-12-24T06:23:25.030 に答える