0

我有一个搜索表单,可以查询数据库中的一个表,但有很多参数(语言、级别、创建者等)。如果填写了相关字段,则下面的代码有效,但我想将其更改为:

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

这是控制器中的代码:

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

对此我感到完全陌生,但很多文档都建议我应该使用“where”。

4

2 回答 2

2

从 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非常有用,还有其他的,比如SphinxElastic Search。您应该快速查看这些并使用您觉得最舒服的那个。

于 2013-01-28T11:01:56.693 回答
1

如果您在应用程序中使用搜索功能,我建议您使用SearchLogicgem

它易于使用且有效..

搜索逻辑

用于搜索逻辑的 RailsCast

于 2013-01-28T09:09:31.770 回答