2012-07-11 75 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 
相關問題