Ruby on rails 值位于两列之间的Arel查询
我想在ActiveRecord/Arel中编写一个查询(无需对SQL进行硬编码)来测试日期是否在两列之间:例如,Ruby on rails 值位于两列之间的Arel查询,ruby-on-rails,rails-activerecord,arel,Ruby On Rails,Rails Activerecord,Arel,我想在ActiveRecord/Arel中编写一个查询(无需对SQL进行硬编码)来测试日期是否在两列之间:例如,其中输入的日期在某个表。列1和某个表。列2之间。我尝试了以下方法: between_query = Arel::Nodes::Between.new( Time.zone.now, Arel::Nodes::And.new( [ arel_table[:column_1], arel_table[:column_2] ] ) ) wh
其中输入的日期在某个表。列1和某个表。列2
之间。我尝试了以下方法:
between_query = Arel::Nodes::Between.new(
Time.zone.now,
Arel::Nodes::And.new(
[
arel_table[:column_1],
arel_table[:column_2]
]
)
)
where(between_query)
但我得到的错误是:Arel::Visitors::UnsupportedVisitError:Unsupported参数类型:Time。改为构造Arel节点。您可以尝试构造Arel节点:
您可以尝试构造Arel节点:
您需要用某种SQL节点替换
Time.zone.now
。如果您只是想查看当前时间是否在两列之间,则应该可以:
between_query = Arel::Nodes::Between.new(
Arel.sql('current_date'),
Arel::Nodes::And.new(
[
arel_table[:column_1],
arel_table[:column_2]
]
)
)
where(between_query)
否则,如果您试图传递一个可变的时间,而不是
Arel.sql('current_date')
,将其替换为Arel::Nodes::Quoted.new(time.zone.now.to_s(:db))
,您需要将time.zone.now
替换为某种sql节点。如果您只是想查看当前时间是否在两列之间,则应该可以:
between_query = Arel::Nodes::Between.new(
Arel.sql('current_date'),
Arel::Nodes::And.new(
[
arel_table[:column_1],
arel_table[:column_2]
]
)
)
where(between_query)
否则,如果您试图传入一个可变时间,而不是
Arel.sql('current_date')
,那么将其替换为Arel::Nodes::Quoted.new(time.zone.now.to_s(:db))
出于好奇,为什么不使用一个好的老式ARwhere
语句呢,你为什么不使用一个好的老式ARwhere
语句呢?你也可以通过Arel.sql(“{Time.zone.now}”)来实现它。
你也可以通过Arel.sql(“{Time.zone.now}”)来实现它。