Rails Arel - 如何使用MySQL做INTERVAL 1 DAY



在使用Arel的Rails 4应用程序中,我将如何构造WHERE子句的以下部分?

stopped_at < DATE_ADD(DATE(started_at), INTERVAL 1 DAY)

我已经有以下内容:

started_at_date = Arel::Nodes::NamedFunction.new('DATE', [arel_table[:started_at]])
next_day = Arel::Nodes::NamedFunction.new('DATE_ADD',
                                          [started_at_date, 'INTERVAL 1 DAY'])
conditions = arel_table[:stopped_at].lt(next_day)

问题是间隔 1 天被引用:

>> conditions.to_sql
=> "`my_table`.`stopped_at` < DATE_ADD(DATE(`my_table`.`started_at`), 'INTERVAL 1 DAY')"

MySQL不喜欢它被引用,所以我需要告诉Arel不要引用它。我该怎么做?

SqlLiteral是我需要的:

started_at_date = Arel::Nodes::NamedFunction.new('DATE', [arel_table[:started_at]])
one_day = Arel::Nodes::SqlLiteral.new('INTERVAL 1 DAY')
next_day = Arel::Nodes::NamedFunction.new('DATE_ADD',
                                          [started_at_date, one_day])
conditions = arel_table[:stopped_at].lt(next_day)

相关内容

  • 没有找到相关文章

最新更新