You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Rails使用Arel构建BETWEEN查询报undefined method `and'错误如何解决

问题解决方法

报错原因

你遇到的报错是因为Arel::Attributes::Attribute(也就是你取的arel_table[:minimum]实例)本身没有and方法,该方法是Arel条件节点的组合方法,不可用于构造BETWEEN的边界范围。Arel::Nodes::Between的第二个入参要求传入Arel::Nodes::Range类型的实例来定义上下边界,而非直接调用and方法拼接。

正确实现代码

写法1:显式构造Between节点(适配复杂多表关联场景)

MyModel.where(
  Arel::Nodes::Between.new(
    Arel::Nodes::Quoted.new(my_variable), # 将自定义变量包装为Arel可识别的字面量节点
    Arel::Nodes::Range.new(
      MyModel.arel_table[:minimum],
      MyModel.arel_table[:maximum]
    )
  )
)

写法2:使用Arel内置辅助方法(更简洁)

MyModel.where(
  Arel::Nodes::Quoted.new(my_variable).between(
    MyModel.arel_table[:minimum]..MyModel.arel_table[:maximum]
  )
)

简单场景备选写法(无复杂关联时可直接使用)

如果没有复杂的多表关联逻辑,也可以直接用占位符写法,代码更易读:

MyModel.where("? BETWEEN minimum AND maximum", my_variable)

以上写法最终生成的SQL都和你需要的目标逻辑完全一致。

内容的提问来源于stack exchange,提问作者Jonathan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 08:21:02