在我的Rails 3.2应用程序中,我有三个ActiveRecord模型,Post PostTag和Tag。 PostTag是一个链接表(仅包含其他键的外键)。
有几个现有的Tag记录。我在posts_controller.create方法中手动将一组Tag记录分配给Post,如下所示:
tags = Tag.all
@post.tags = tags
当我保存时,它在Tag中运行我的自定义验证方法,就好像它正在创建新的Tag记录一样,即使我只是将Tag记录链接到新的Post。我也没有在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
我尝试过使用<<而不是在the ActiveRecord documentation上面的作业中的=,而是没有运气。
答案 0 :(得分:0)
我相信您遇到此问题,因为您的关联是:through => :post_tags
。您需要创建新的PostTag
元素来保留链接。试试这个:
Tag.all.each { |tag| PostTag.create!(tag: tag, post: @post) }
或者,您可以尝试移植到has_and_belongs_to_many
关联,该关联将PostTag
摘除。