我试图找出是否存在更多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和第一个使用Arel的查询之间的差异。
答案 0 :(得分:0)
您可以使用arel做到这一点:
User.where(User.arel_table[:created_at].eq(User.arel_table[:updated_at]))