2017-03-17 75 views
1

任何人都可以建議我一些鏈接或幫助我有關如何在軌道上做紅寶石布爾搜索的一些想法。如何在軌道上的紅寶石布爾搜索?

我想用布爾運算符在搜索領域,如下面的一個:

(A OR B) AND (NOT C) 

(A OR (C AND D)) AND (NOT (F OR G)) 

參考: boolean-basics-job search - 此鏈接解釋布爾搜索。

但是如何在rails上使用ruby實現這個搜索?

有沒有辦法在紅寶石軌道上做到這一點?

希望澄清。提前。

回答

4

我不確定你想要使用SQL邏輯還是Ruby邏輯。所以 紅寶石邏輯

1. (A || B) && !C 
2. (A || (C && D)) && !(F || G) 

Rails的ActiveRecord的搜索(SQL)

  1. Model.where('a = ? OR b = ?', a_value, b_value).where.not('c = ?', c_value)

  2. Model.where('a = ? OR (c = ? AND d = ?)', a_value, c_value, d_value).where.not('f = ? OR g = ?', f_value, g_value)

當然會我好得多,如果您創建範圍該方法。

class Model 
    scope :first_scope, ->(a_value, b_value) { where('a = ? OR b = ?', a_value, b_value) } 
    scope :second_scope, -> (c_value) { where.not('c = ?', c_value) } 
end 

然後

Model.first_scope(a_value, b_value).second_scope(c_value) 
+0

u能告訴我SQL邏輯太 – user7348784

+0

其在ActiveRecord的邏輯。 ActiveRecord將'映射'爲SQL,但在這裏:''SELECT'some_table'。* FROM'some_table'WHERE a ='t'OR(b ='t'AND c ='f'))AND(d!='如果你想查看由AR生成的SQL,你可以使用:'Model.first_scope(a_value,b_value).second_scope(c_value).to_sql' – Argonus

0

邏輯OR = ||
邏輯AND = & &
邏輯NOT =! ()

(A || B) && !C 

(A || (C && D)) && !(F || G)