Arel:从值数组动态生成条件
Arel: Dynamically generate conditions from array of values
我正在寻找为 Rails 应用程序中的查询生成“或”条件,从我想尝试 match
对单个列中的值的单词数组,在阿雷尔。我正在尝试遵循 very similar SO question with a good answer.
中的建议
但是那个问题中的 OP 没有解释 value.to_condition
他将自己的价值观转化为条件的方法。基本上我不明白如何将每个单词字符串变成可链接的 Arel 条件。
当链接 SQL 查询字符串时,这种事情对我来说很容易理解,但在 Arel 中,我不知道如何在不执行条件的情况下链接条件 — 条件是直接的 Ruby.
在下面,patterns
是我的单词数组。每个条件都应表述为 Table.arel_table[:text].matches(pattern)
,我希望这些条件中的每一个都与 .or
连接
conditions = patterns.inject { |conds, cond| cond.or(conds) }
虽然我尝试这样做,但我不明白链接是否或如何工作。
conditions = patterns.inject do |conds, cond|
Table.arel_table[:text].matches(pattern).or(conds)
end
哎呀 - 使用 Arel 非常简单。
Table.where(Table.arel_table[:text].matches_any(patterns))
我仍然想了解有关链接 Arel 条件的更多信息。
我正在寻找为 Rails 应用程序中的查询生成“或”条件,从我想尝试 match
对单个列中的值的单词数组,在阿雷尔。我正在尝试遵循 very similar SO question with a good answer.
但是那个问题中的 OP 没有解释 value.to_condition
他将自己的价值观转化为条件的方法。基本上我不明白如何将每个单词字符串变成可链接的 Arel 条件。
当链接 SQL 查询字符串时,这种事情对我来说很容易理解,但在 Arel 中,我不知道如何在不执行条件的情况下链接条件 — 条件是直接的 Ruby.
在下面,patterns
是我的单词数组。每个条件都应表述为 Table.arel_table[:text].matches(pattern)
,我希望这些条件中的每一个都与 .or
conditions = patterns.inject { |conds, cond| cond.or(conds) }
虽然我尝试这样做,但我不明白链接是否或如何工作。
conditions = patterns.inject do |conds, cond|
Table.arel_table[:text].matches(pattern).or(conds)
end
哎呀 - 使用 Arel 非常简单。
Table.where(Table.arel_table[:text].matches_any(patterns))
我仍然想了解有关链接 Arel 条件的更多信息。