通过搜索将一个属性与另一个属性进行比较

时间:2014-06-18 20:04:37

标签: ruby-on-rails ruby-on-rails-4 ransack

Ransack允许我使用属性,谓词和值构建条件。我无法找到有关如何将一个属性与另一个属性进行比较的任何文档。例如,我如何为以下内容创建条件:

WHERE column_a < column_b

1 个答案:

答案 0 :(得分:2)

我一直在使用Ransack很长一段时间,但我认为没有任何可能做你正在寻找的东西。你想要的是一个“case - &gt; when”语句,它可以在Rails中生成,也可以在ActiveRecord中生成。

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?

希望这有点帮助!

相关问题