【问题标题】:How to do Boolean search in ruby on rails?如何在 ruby​​ on rails 中进行布尔搜索?
【发布时间】:2017-03-17 11:20:01
【问题描述】:

谁能建议我一些链接或帮助我了解如何在 ruby​​ on rails 中进行布尔搜索。

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

(A OR B) AND (NOT C)

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

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

但是如何用 ruby​​ on rails 实现这个搜索呢?

有没有办法在 ruby​​ on rails 中做到这一点?

希望这能澄清一下。在此先感谢。

【问题讨论】:

    标签: ruby-on-rails boolean-logic


    【解决方案1】:

    我不确定您要使用 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)
    

    【讨论】:

    • 你能告诉我SQL逻辑吗
    • 它在 ActiveRecord 逻辑中。 ActiveRecord 将其“映射”到 SQL 但在这里:"SELECT 'some_table'.* FROM 'some_table' WHERE a = 't' OR (b = 't' AND c = 'f')) AND ( d != 't')" 如果您想查看 AR 生成的 SQL,您可以使用:Model.first_scope(a_value, b_value).second_scope(c_value).to_sql
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 2011-03-11
      • 2010-09-08
      • 1970-01-01
      • 2010-11-05
      • 1970-01-01
      • 2010-11-28
      • 1970-01-01
      • 2014-06-06
      • 1970-01-01
      相关资源
      最近更新 更多