Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 值位于两列之间的Arel查询_Ruby On Rails_Rails Activerecord_Arel - Fatal编程技术网

Ruby on rails 值位于两列之间的Arel查询

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

我想在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]
    ]
  )
)
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))

出于好奇,为什么不使用一个好的老式AR
where
语句呢,你为什么不使用一个好的老式AR
where
语句呢?你也可以通过
Arel.sql(“{Time.zone.now}”)来实现它。
你也可以通过
Arel.sql(“{Time.zone.now}”)来实现它。