我有一个搜索表单,可以查询数据库中的一个表,但有很多参数(语言、级别、创建者等)。如果填写了相关字段,下面的代码就可以工作,但我想将其更改为:
a) 添加更多参数(有几个);b) 允许字段为空
下面是控制器中的代码:
@materials = Material.find(:all, :conditions => {:targ_lang => params["targ_lang"],
:inst_lang => params["inst_lang"],
:level => params["level"]})
恐怕是全新的,但很多文档都建议我应该使用"where"。
从 Rails 3 开始,您可以使用 where()
函数:
@materials = Material.where(targ_lang: params["targ_lang"], inst_lang: params["inst_lang"], level: params["level"])
另外,您可以查看范围
这些允许您设置要在模型中执行的操作并在控制器中调用它,例如:
class Material < ActiveRecord::Base
scope :active, where(active_state: true)
end
然后在控制器中执行以下操作:
@active_materials = Material.active
如果您要加入多个模型并希望保持控制器不那么混乱,这会很有用。
总而言之,就像@RVG所说,seachlogic非常有用,还有其他像Sphinx和Elastic Search这样的。您应该快速浏览一下这些并使用您觉得最舒适的一个。
应用程序中使用搜索功能,我建议您使用SearchLogic
gem
它易于使用且有效。
搜索逻辑
RailsCasts for searchlogic