在许多实例上的acts_as_taggable

时间:2014-06-18 18:09:22

标签: ruby-on-rails acts-as-taggable

以下是例子:

@profiles = Profile.where(something: true)

而不是:

@profiles.each do |profile|
  @some_user.tag(profile, :with => "paris, normandy")
end

有没有办法在一次调用中标记模型的所有实例,比如这样?:

@some_user.tag(@profiles, :with => "paris, normandy")

1 个答案:

答案 0 :(得分:0)

我认为没有任何开箱即用的功能,但如果您关注性能/速度,请查看directly using the Tagging model进行批量标记分配。

以下是针对您的用例的代码改编,您仍需要提供profile_ids和tag_ids。

Tagging.transaction do
  profile_ids.each do |pid|
    tag_ids.each do |tid|
      values = ["Profile", pid, tid].join(", ")
      Tagging.connection.execute "INSERT INTO taggings (taggable_type, taggable_id, tag_id) VALUES (#{values}) ON DUPLICATE KEY UPDATE id=id"
    end
  end
end