如何根据相关数据从模型中提取条目? (导轨)

时间:2012-01-08 17:15:56

标签: ruby-on-rails ruby-on-rails-3 tags tagging

假设我有一个讨论模型,并且可以标记讨论。这些标签通过标签表与讨论相关联。

我想定义一个基本上会执行的方法.tagged_with(tag):

 def tagged_with

      Discussion.where(#something about tags include the tag given)
 end

我确实有一些可能有用的方法已经设置好了。例如,我有tag_list

 def tag_list
     tags.map(&:name).joins(", ") #my tags are separated by commas, not spaces)
 end

如果有人知道基于一个标签修剪讨论模型的简单问题的答案,我该如何将其扩展为更具适应性 - 例如,接受多个标签的参数,并且能够指定任何标签或者都是必要的。 EG:

 Discussion.tagged_with(tag1, tag2, :any => true)

仅供参考协会的一些代码:

has_many :taggings, :as => :taggable
has_many :tags, :through => :taggings, :source => :tag, :source_type => "Tag"

1 个答案:

答案 0 :(得分:1)

您应该能够通过has_many关系将标记表加入到您的讨论查询中。 Discussion.joins(:tags).where(:tags => {:name => array_of_tags})

使用以下方法定义,您可以执行Discussion.tagged_with(['foo', 'bar'])Discussion.tagged_with('foo')之类的操作。

def self.tagged_with(tag_or_tags)
  joins(:tags).where(:tags => {:name => tag_or_tags})
end