Rails查询同一表的两列是否等于它们的值

Aar*_*ron 3 ruby-on-rails arel

我正在尝试查找是否存在更多的Rails-y方法来生成以下查询

# The purpose of this query is to select Users who have not updated
# their user record.

SELECT `users`.* FROM `users` WHERE `users`.`created_at` = `users`.`updated_at`
Run Code Online (Sandbox Code Playgroud)

我可以使用Arel完成以下任务:

arel_where = User.arel_table[:created_at].eq(User.arel_table[:updated_at])
User.where(arel_where)
  #=> … WHERE `users`.`created_at` = `users`.`updated_at`
Run Code Online (Sandbox Code Playgroud)

但是,如果不访问表并使用其相等方法,则无法使用哈希语法的任何组合来执行此操作。以下两个由于将密钥转换为字符串而失败。

User.where(created_at: :updated_at)
  #=> … WHERE `users`.`created_at` = 'updated_at'

User.where(created_at: User.arel_table[:updated_at])
  #=> … WHERE `users`.`created_at` = '--- !ruby/struct:Arel::Attributes::Attribu…
Run Code Online (Sandbox Code Playgroud)

编辑

虽然不是硬性要求,但我尝试避免使用类似以下的字符串:

User.where('created_at = updated_at')
  #=> WHERE (created_at = updated_at)
Run Code Online (Sandbox Code Playgroud)

有时我会分析我的日志,这与使用Arel的第一个查询之间的查询差异需要解决。

小智 7

User.where(“ created_at = Updated_at”)