Ruby on rails 用于使用布尔逻辑创建自定义筛选器的Web表单
我有一个Rails应用程序,我希望用户能够从类别列表中创建自定义的布尔组合,该列表本身是动态加载的。例如,如果我有foo-bar和baz类别,我希望用户能够选择foo-bar或baz或foo或baz或这些类别的任何其他逻辑组合。我预计最常见的用例是a、b、c、d、e、f、g或h;也就是说,几个析取的结合 然后,结果将存储在某些数据结构中,这些数据结构可以用作过滤器。理想情况下,这一切都将通过图形界面完成,而不是让用户在文本中构造布尔逻辑 在我尝试自己实现这一点之前,是否有一个库我可以拉进去,它已经实现了这一点或类似的东西?或者一些开源的东西,可以让我参与其中,我可以进行分叉和修改?您可以通过四种方式实现布尔检索来选择给定的类别: 未选择 正选择+前缀;类别是强制性的 负选择-谷歌搜索中的前缀;类别不能出现 未选择前缀 不在ruby on rails中,但可能很容易从c翻译: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;也就是说,几个析取的结合 然后,结果将存储在某些数据结构中,这些数据结构可以用作过滤器。理想情况下,这一切都将通过图形界面完成,而不是让用户在文本中构造布尔逻辑 在我尝试自己实现这一点之前,是否有一个库我可以拉进去,它已
我认为这可以通过使用表单成功实现,为类别选择选择\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;
}