如何在Rails3中执行搜索?

时间:2011-01-02 22:17:23

标签: sql search ruby-on-rails-3 arel

我知道我可以通过在模型上调用where()来搜索查询,如下所示: Post.where(:title => 'My First Post')

但是,如果我不知道用户是否想要过滤搜索参数怎么办? 例如,我有一个具有可选title字段的搜索表单。如果标题已填写,表单应搜索标题。但是,如果不是,表单应该只返回所有字段。

我试着按照

的方式做点什么
search = Post.all
if params[:title].present?
   search.where(:title => params[:title])
end

然而,当我调用Post.all时,Rails会立即返回搜索结果,而我无法再进一步添加条件/

我该怎么做?

谢谢!

2 个答案:

答案 0 :(得分:1)

鉴于在这里链接的关系确实没有太多,看起来似乎是一个带有三元运算符的简单单线程可能会这样做:

@posts = params[:title].present? ? Post.where(:title => params[:title]) : Post.all

...因为当没有:where子句范围时,你以后不能将它链接到:all,无论如何。

答案 1 :(得分:1)

.all是arel的'finisher'方法,可以实际调用查询(同样适用于.each.first)。因此,如果您希望能够有条件地建立范围,.all应该是最后调用的内容,如果您想要调用它。