在SQL中,您可以通過多種條件進行搜索。您已經定義了兩個範圍的,他們可以如下鏈接在一起:
Project.search_by_name('fooproject').search_by_client('misterx')
這將創建下列SQL:
SELECT "projects".* FROM "projects" WHERE "projects".name LIKE '%fooproject%' AND "projects".client_id LIKE '%misterx'
運營商加入這兩個條件是「AND」,這意味着結果將是符合兩個條件的條件,而不是條件。
有幾種方法可以檢索具有特定名稱的項目或屬於客戶端的項目。最簡單的方法是創建一個新的範圍,指定或運算符:
scope :search_by_name_or_client, lambda { |name, client| where('name LIKE ? OR client_id LIKE ?', "%#{name}%", "%#{client}%") }
您可能也想看看SQL工會,它結合了結果集的兩個或更多個SELECT語句。 ActiveRecord的不處理UNION的功能,但也有寶石來擴展功能,包括這一點,如https://github.com/tsmango/union
而且例如寫這個使用聯盟寶石是這樣的:
Project.union([{:conditions => ['name like ?', "%#{name}%"]}, {:conditions => ['client like ?', "%#{client}%"]}])
這將產生下面的SQL:
SELECT "projects".* FROM "projects" WHERE "projects".name LIKE '%fooproject%'
UNION
SELECT "projects".* FROM "projects" WHERE "projects".client_id LIKE '%misterx'
更多關於UNION的SQL語句的信息可以在這裏找到:http://www.w3schools.com/sql/sql_union.asp
是什麼你的控制器看起來像? – 2012-02-25 17:20:17
就像這樣:'@projects = current_user.projects.search_by_name(PARAMS [:名字])。search_by_client(PARAMS [:客戶端])' – Tintin81 2012-02-25 17:55:34