【发布时间】:2017-11-29 16:18:10
【问题描述】:
我正在尝试查找是否存在更多 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`
我可以使用 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`
但是,如果不访问表并使用它的相等方法,我就不能使用哈希语法的任何组合来执行此操作。以下两个由于将密钥转换为字符串而失败。
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…
编辑
虽然不是硬性要求,但我试图避免使用以下字符串:
User.where('created_at = updated_at')
#=> WHERE (created_at = updated_at)
我有时会分析我的日志,并且需要考虑这与第一个使用 Arel 的查询之间的差异。
【问题讨论】:
标签: ruby-on-rails arel