链接一些现有记录时,验证调用ActiveRecord关联

时间:2013-05-22 10:16:53

标签: ruby-on-rails-3 rails-activerecord

在我的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上面的作业中的=,而是没有运气。

1 个答案:

答案 0 :(得分:0)

我相信您遇到此问题,因为您的关联是:through => :post_tags。您需要创建新的PostTag元素来保留链接。试试这个:

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

或者,您可以尝试移植到has_and_belongs_to_many关联,该关联将PostTag摘除。