Ruby on rails 用于使用布尔逻辑创建自定义筛选器的Web表单

Ruby on rails 用于使用布尔逻辑创建自定义筛选器的Web表单,ruby-on-rails,boolean-logic,Ruby On Rails,Boolean Logic,我有一个Rails应用程序,我希望用户能够从类别列表中创建自定义的布尔组合,该列表本身是动态加载的。例如,如果我有foo-bar和baz类别,我希望用户能够选择foo-bar或baz或foo或baz或这些类别的任何其他逻辑组合。我预计最常见的用例是a、b、c、d、e、f、g或h;也就是说,几个析取的结合 然后,结果将存储在某些数据结构中,这些数据结构可以用作过滤器。理想情况下,这一切都将通过图形界面完成,而不是让用户在文本中构造布尔逻辑 在我尝试自己实现这一点之前,是否有一个库我可以拉进去,它已

我有一个Rails应用程序,我希望用户能够从类别列表中创建自定义的布尔组合,该列表本身是动态加载的。例如,如果我有foo-bar和baz类别,我希望用户能够选择foo-bar或baz或foo或baz或这些类别的任何其他逻辑组合。我预计最常见的用例是a、b、c、d、e、f、g或h;也就是说,几个析取的结合

然后,结果将存储在某些数据结构中,这些数据结构可以用作过滤器。理想情况下,这一切都将通过图形界面完成,而不是让用户在文本中构造布尔逻辑

在我尝试自己实现这一点之前,是否有一个库我可以拉进去,它已经实现了这一点或类似的东西?或者一些开源的东西,可以让我参与其中,我可以进行分叉和修改?

您可以通过四种方式实现布尔检索来选择给定的类别:

未选择 正选择+前缀;类别是强制性的 负选择-谷歌搜索中的前缀;类别不能出现 未选择前缀 不在ruby on rails中,但可能很容易从c翻译:


我认为这可以通过使用表单成功实现,为类别选择选择\u标记,并检查\u标记是否处于活动状态。提交表单并将数据存储在DB表中。如果我理解正确,这将处理表单a或b的任何表达式或。。。c和。。。和~d和~e。所以它不够灵活,无法处理像a、b、c、d、e或f这样的东西。是的,这是正确的。最好是有一个带有AND/OR/NOT运算符和方括号的完整的可能嵌套的布尔表达式。但缺点是,这将使最终用户的问题复杂化。您可能希望了解Excel如何允许用户指定数据过滤器。
    public bool IsMatch(string s)
    {
        s = s.ToLower();

        bool ret = ((negWords.Count == 0) || !hasMatchInSet(s, negWords, true))
           && ((posWords.Count == 0) || hasMatchInSet(s, posWords, false))
           && ((words.Count == 0) || hasMatchInSet(s, words, true));

        return ret;
    }

   private bool hasMatchInSet(string s, HashSet<string> setOfWords, bool breakOnFirstMatch)
    {
        int matches = 0;
        bool ret = false;

        foreach (string w in setOfWords)
        {
            if (s.IndexOf(w, StringComparison.InvariantCultureIgnoreCase) >= 0)
            {
                matches++;

                if (breakOnFirstMatch)
                {
                    break;
                }
            }
        }

        ret = (breakOnFirstMatch && (matches > 0)) || (matches == setOfWords.Count);

        return ret;
    }