繁体   English   中英

如何在 Active Record 之外使用诸如“coalesce”之类的 Arel 方法?

[英]How to use Arel methods like `coalesce` outside Active Record?

我想在 Active Record 模型之外生成部分查询,例如

class Foo
  def to_arel
    coalesce(1, 2)
  end
end

我可以通过一些现有的 model 实现 go,但这很不雅:

Item.arel_table.coalesce(1, 2).to_sql # => "COALESCE(1, 2)"

有什么更好的方法?

(这个项目目前在 Rails 6.1 上,但我也对新版本的解决方案感兴趣。)

这就是我想出的:

class Foo
  def to_arel
    arel.coalesce(1, 2)
  end

  private

  def arel
    @arel ||= Class.new.extend(Arel::FactoryMethods)
  end
end

(我也可以直接在Fooinclude Arel::FactoryMethods ,但这对我来说似乎很乱。)

Foo.new.to_arel返回一个Arel::Nodes::NamedFunction 调用to_sql仅在存在数据库连接时才有效,正如我在无 Rails 测试中尝试这样做时注意到的那样。 这是有道理的,因为它需要知道您是使用 MySQL 还是 Postgres 来生成正确的 SQL。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM