Rails:范围过滤器问题

时间:2011-01-23 18:59:54

标签: ruby-on-rails

您好我有这样的代码:

query = Post.order("published_at desc")
query = query.where("location_id = ?", params[:location_id]) unless params[:location_id].blank?
query = query.where("category_id = ?", params[:category_id]) unless params[:category_id].blank?
@posts = query.all

帖子基本上有一个location_id和一个category_id。所以现在我可以根据这些进行过滤。但是帖子也有很多标签。 例如,帖子可能有一个java标签和一个css标签。

我可能想要只使用java标记过滤所有帖子。或者同时包含java和css标记的帖子。我该怎么做?

1 个答案:

答案 0 :(得分:1)

在不了解您的Tag模型的情况下,提供一个工作示例有点困难。但是,这是一个假设它是has_many关联的示例,其中每个标记属于一个Post,并且标记具有名称字段。您可以在Post模型中定义一个基于标记名称进行过滤的范围:

class Post < ActiveRecord::Base
  scope :with_tags, lambda {|tags| joins(:tags).where("tags.name IN (?)", tags)}
end

然后像这样使用它:

tags = ["java"]
@posts.with_tags(tags)

tags = ["java", "css"]
@posts.with_tags(tags)