私はRails 3.2アプリケーションを書いていますが、このタイプの要件はかなり頻繁に出てくると思います. 私のアプリケーションには、次の ActiveRecord モデルがあります。
- ユーザー
- メッセージ
- 連絡先
- MessageContacts (メッセージ <-> 連絡先の has_many スルー テーブル)
ユーザーが新しいメッセージを作成するときに、自分の連絡先のみをメッセージに追加できるようにしたいと考えています。このプロセスを DRY にする可能性のある提案や関連する宝石 (cancan?) を聞きたいです。
以下は私がまとめたもので、動作しているように見えますが、これが正しい方法であるかどうかを知りたいです.
class Message < ActiveRecord::Base
belongs_to :user
has_many :message_contacts
has_many :contacts, through: :message_contacts
validates_each :contacts do |record, attr, contacts|
contacts.each do |contact|
record.errors.add(attr, 'must belong to you') if contact.user_id != record.user_id
end
end
end