Ransack 允许我使用属性、谓词和值构建条件。但是,我找不到任何关于如何将一个属性与另一个属性进行比较的文档。例如,我如何为以下内容创建条件:
WHERE column_a < column_b
最佳答案
我已经使用 Ransack 有一段时间了,但我看不到任何可能做你正在寻找的事情。您需要的是“case -> when”语句,它可以在Rails 中生成,也可以作为带有ActiveRecord 的SQL 生成。
Ransack 使您能够通过定义属性、谓词和值来创建自定义 SQL 命令,然后将其转换为您已经提到的 WHERE 语句。我看不出有任何可能直接告诉 Ransack 过滤你想要的东西。然而:
您可以创建一个范围,例如:
scope :column_b_gt_columnb_a, -> { where('column_b > column_a') }
然后你可以像这样构建你的搜索:
Object({ column_b_gt_columnb_a: true })
可能不是你真正想要的,但我认为这是你能得到的最好的......
如果你想用 Rails 来做,你可以比较值或使用我上面使用的 where 语句。
Records.each do |i|
case i.variable_a
when i.variable_b
# do something when it's the same
when i.variable_a > i.variable_b
# do something when it's greater
end
end
有关 SQL 语句的示例,请查看此处
How do I compare two columns for equality in SQL Server?
希望这个对你有帮助!
关于ruby-on-rails - 将一种属性与另一种属性与掠夺进行比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24294137/