0

我使用 gem rails3-jquery-autocomplete对我的数据库中的项目进行自动完成搜索。自动完成工作正常,但我需要向生成的查询添加另一个条件。

如果我开始编写搜索字符串,则会生成以下查询:

SELECT persons.id, persons.name FROM "persons" WHERE (LOWER(persons.name) ILIKE 'jo%') ORDER BY persons.name ASC LIMIT 10

这将返回所有行,其中名称从jo.

但是我怎么能搜索所有的人,名字从jo同时开始,例如,列active_person= 1?有没有为此目的的帮助者或类似的东西?

谢谢

4

3 回答 3

2

如果我正确理解了上下文,那么active_person是一个布尔值,指示用户是否处于活动状态。

如果这种行为在大多数情况下是可取的 - 您搜索仅活跃的用户/人员,那么您可以在您的 Person 模型中包含一个 default_scope ,如下所示:

class Person < ActiveRecord::Base
  default_scope where(:active_person => 1)
end

这样,任何生成的查询也将检查 active_person = 1

更多关于默认范围的信息:http: //apidock.com/rails/ActiveRecord/Base/default_scope/class

于 2012-07-12T03:13:45.657 回答
2

我知道@Andrei 的答案是正确的,但这不是我想要的。我猜@user984621 也一样。我一直在寻找的是我想在查询中添加一个额外的条件。通过阅读此https://github.com/crowdint/rails3-jquery-autocomplete/blob/master/lib/rails3-jquery-autocomplete/orm/active_record.rb

我发现rails自动完成支持附加条件,你只需要将另一个参数传递给默认用法,就像这样

autocomplete :user, :name, :where => { :role => 'employee'} 

而不是这个

autocomplete :user, :name
于 2012-10-16T21:37:58.337 回答
0

更改WHERE (LOWER(persons.name) ILIKE 'jo%')WHERE (LOWER(persons.name) ILIKE 'jo%') AND active_person = 1

AND您可以用s 和OR以这种方式将大量子句链接在一起。

请注意,这实际上是一个关于 SQL 的问题:您的标题和标签有点误导。

于 2012-07-11T22:18:34.443 回答