ActiveRecord —命名查询片段占位符

ActiveRecord —命名查询片段占位符

原文:https://medium.com/hackernoon/activerecord-named-query-fragment-placeholders-8f541535586f

每当我想在 Rails 的原始 SQL 查询片段中使用占位符时,我会使用?,最后写下—

Post.where('published_at > ?', some_time)

如果我想添加另一个条件来检查some_time中的相同值,该怎么办?

Post.where('published_at > ? OR saved_at > ?', some_time, some_time)

老实说,编写这样的代码从来没有困扰过我,我也没有花一点力气去看看是否有更好的方法。

有一天,我和我的一个同事普瑞蒂·库玛配对,她在她的查询片段中有一些看起来像符号的东西,像这样——published_at > :date

我以前从未见过这样的东西,我在想这是不是某个深奥的数据库功能还是:D 的什么东西

那时我才知道,可以在查询片段中使用命名占位符,并为 ActiveRecord 传入一个散列来解析这些值。

现在,我可以愉快地把我的声明改写成—

Post.where('published_at > :time OR saved_at > :time', selected_time: some_time)

人们可以很容易地看到许多小的胜利,比如—

  • 如果占位符名称经过深思熟虑,较长的查询可读性会更好。降低认知开销。
  • 你没有重复写出多次使用的变量。
  • 位置耦合中断。

本站为非盈利网站,作品由网友提供上传,如无意中有侵犯您的版权,请联系删除