如何在 rails 上的 ruby 中进行布尔搜索?

How to do Boolean search in ruby on rails?

任何人都可以向我推荐一些 link 或帮助我了解如何在 rails 上的 ruby 中进行布尔搜索的一些想法。

我想在搜索字段中使用布尔运算符,如下所示:

(A OR B) AND (NOT C)

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

参考: boolean-basics-job search -- 这个 link 解释了布尔搜索。

但是如何在 rails 上使用 ruby 执行此搜索?

在 rails 的 ruby 中有什么方法可以做到吗?

希望这个clarifies.Thanks提前。

逻辑或 = ||
逻辑与 = &&
逻辑非=!或不()

(A || B) && !C

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

我不确定您要使用 SQL 逻辑还是 Ruby 逻辑。所以 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)