質問

私はLabellingsEmailsに属しLabelsを持っています。

各標識は、電子メール/ラベルのペアに対して一意である必要があります - 電子メールが一度だけ「試験」標識することができるように、

私はvalidates_uniqueness_of :label_id, :scope => :email_idでこれをやっています。この作品は、予想通ります。

私は電子メールをラベル付けしていた場合、

、私は電子メールがすでにそのラベルで標識されている場合、それが一意である場合はラベルを追加し、何もしないようにしたいです。

私のようなもので私のアプリの周りの検証機能を複製する必要はありません

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

これは、各ラベル付けを確保することは可能ですが、手動でそれをチェックしたりすることなく、独自のEMAIL_ID / label_idペアを持っているハンドルの例外?

役に立ちましたか?

解決

私はそれをテストしていませんが、あなたはおそらく、関連プロキシでのようなもの<<を上書きすることができます:

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
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top