2012-07-11 44 views
0

我使用gem rails3-jquery-autocomplete来自动完成我的数据库中的项目搜索。自动完成工作正常,但我需要为生成的查询添加另一个条件。Rails 3 - 如何添加到自动完成另一个条件?

如果我开始写一个查找的字符串,然后生成以下查询:

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? 有没有这方面的帮手或类似的东西?

谢谢

回答

2

如果我正确理解上下文,那么active_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

+0

谢谢,这个解决方案正在工作,但只是特别。这行代码添加到每个查询'where(:active_person => 1)'。我需要添加这条线只是为了一些查询... – user984621 2012-07-12 07:05:22

+0

在哪些情况下你会喜欢那条线被应用?如果您可以识别特定情况,则可以在应用该行时添加条件。具体的控制器操作 – Andrei 2012-07-12 14:25:27

0

变化WHERE (LOWER(persons.name) ILIKE 'jo%')WHERE (LOWER(persons.name) ILIKE 'jo%') AND active_person = 1

你可以连续用AND S和以这种方式OR条款的负荷。

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

+0

的变化你提出的建议很清楚,但重点是 - 如何更新用gem生成的查询。 – user984621 2012-07-11 22:24:40

1

我明白@Andrei的答案是正确的,但它不是我所期待的。我猜它也是@ user984621。我在寻找的是我想为查询添加一个额外的条件。 通过阅读这https://github.com/crowdint/rails3-jquery-autocomplete/blob/master/lib/rails3-jquery-autocomplete/orm/active_record.rb

我发现,轨自动完成支持附加条件,你只要另一个参数传递给默认的使用,这样

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

,而不是这个

autocomplete :user, :name 
相关问题