0

私の 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 のドキュメントに従って、上記の割り当てで = の代わりに << を使用しようとしましたが、うまくいきませんでした。

4

1 に答える 1

0

関連付けが であるため、この問題が発生したと思います:through => :post_tagsPostTagリンクを保持するには、新しい要素を作成する必要があります。これを試して:

Tag.all.each { |tag| PostTag.create!(tag: tag, post: @post) }

has_and_belongs_to_manyまたは、抽象化するアソシエーションに移植することもできますPostTag

于 2014-04-10T06:44:29.563 に答える