简单的has_many通过查询

时间:2015-03-26 13:56:23

标签: ruby-on-rails

我通过Event获得Tag - Tagging关联。 在数组tags = %w(tag1 tag2 tag3)中,我有标签名称。我想用这个数组中的一个或多个标签标记所有事件。我怎么能这样做?

2 个答案:

答案 0 :(得分:0)

在标记

上写一个范围
class Tag < ActiveRecord::Base
  def self.with_names(names)
    where(name: names)
  end
end

然后在Event

上写一个范围
class Event < ActiveRecord::Base
  def self.for_tags(tag_names)
    joins(:tags).
    merge(Tag.with_names(tag_names))
  end
end

查询带有

标签的事件
tags = %w(tag1 tag2 tag3)
Event.for_tags(tags)

如果您不希望重复的事件与多个标记匹配,则可能需要调用uniq

Event.for_tags(tags).uniq

答案 1 :(得分:0)

最后我找到了答案,感谢Sontya的评论。

Event.includes(:tags).where(tags: {name: tags})Event.includes(:tags).where("tags.name IN (?)", tags).references(:tags)