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

Dav*_*ave 5 ruby-on-rails ransack ruby-on-rails-4

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

WHERE column_a < column_b
Run Code Online (Sandbox Code Playgroud)

Tho*_*mas 2

我已经使用 Ransack 有一段时间了,但我看不到有任何可能做你正在寻找的事情。您想要的是一个“case -> when”语句,它可以在 Rails 中生成,也可以使用 ActiveRecord 作为 SQL 生成。

Ransack 使您能够通过定义属性、谓词和值来创建自定义 SQL 命令,然后将其转换为您已经提到的 WHERE 语句。我不认为有任何可能直接告诉兰萨克过滤你想要的东西。然而:

您可以创建一个范围,例如:

scope :column_b_gt_columnb_a, -> { where('column_b > column_a') }
Run Code Online (Sandbox Code Playgroud)

然后你可以像这样构建你的搜索:

Object({ column_b_gt_columnb_a: true })
Run Code Online (Sandbox Code Playgroud)

可能不是你真正想要的,但我认为这是你能得到的最好的......

如果你想用 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
Run Code Online (Sandbox Code Playgroud)

有关 SQL 语句的示例,请查看此处

如何在 SQL Server 中比较两列是否相等?

希望这个对你有帮助!