如何有效地查询rails 3应用程序?

时间:2013-01-28 08:12:20

标签: ruby-on-rails-3 activerecord

我有一个搜索表单,用于查询数据库中的一个表,但有许多参数(语言,级别,创建者等)。下面的代码提供了有问题的字段,但我想将其更改为:

a)添加更多参数(有几个); b)允许字段为空

这是控制器中的代码:

@materials = Material.find(:all, :conditions => {:targ_lang => params["targ_lang"],
                                                 :inst_lang => params["inst_lang"],
                                                 :level => params["level"]})

我很害怕,但很多文档建议我应该使用“where”。

2 个答案:

答案 0 :(得分:2)

从Rails 3开始,您可以使用where()函数:

@materials = Material.where(targ_lang: params["targ_lang"], inst_lang: params["inst_lang"], level: params["level"])

另外,您可以查看scopes

这些允许您在模型中设置要执行的操作,并在控制器中调用它,例如:

class Material < ActiveRecord::Base
  scope :active, where(active_state: true)
end

然后在控制器中执行以下操作:

@active_materials = Material.active

如果您要加入多个型号并希望保持控制器不那么混乱,这将非常有用。

总而言之,就像@RVG所说,seachlogic非常有用,还有其他像SphinxElastic Search。你应该快速浏览一下这些并使用你最感到最舒服的那个。

答案 1 :(得分:1)

如果您在应用中使用搜索功能,我建议使用SearchLogic gem

易于使用且有效..

SearchLogic

RailsCasts for searchlogic