私の Rails 3.2 アプリケーションには、Post PostTag と Tag という 3 つの ActiveRecord モデルがあります。PostTag はリンク テーブルです (他への外部キーのみが含まれます)。
既存のタグ レコードがいくつかあります。posts_controller.create メソッドで、次のように Tag レコードのコレクションを手動で Post に割り当てます。
tags = Tag.all
@post.tags = tags
保存すると、Tag レコードを新しい Post にリンクしているだけなのに、新しい Tag レコードを作成しているかのように、Tag でカスタム検証メソッドが実行されます。また、Post で宣言された validates_associated もありません。モデル:
Post:
has_many :tags, :through => :post_tags
has_many :post_tags
PostTag:
belongs_to :post
belongs_to :tag
Tag:
has_many :posts, :through => :post_tags
has_many :post_tags
validate :validate_something
def validate_something
...
end
ActiveRecord のドキュメントに従って、上記の割り当てで = の代わりに << を使用しようとしましたが、うまくいきませんでした。