Sql 使用数组和元素相关条件在rails中选择

Sql 使用数组和元素相关条件在rails中选择,sql,ruby-on-rails,Sql,Ruby On Rails,我有一个产品ID数组,我想用它来过滤购买会话列表。到目前为止一切顺利: Session.where('product_id': [23, 32, 17]) 我也有一系列的日期,这些日期为每个产品(不同的)指定日期,我甚至应该考虑他们的会话: [12,2/17,' 1/1 / 17 ',' 20/3 / 17 ' ] < /代码> 换句话说,产品id 23只应考虑用于2017年12月2日之后创建的会话,产品id 32只应考虑用于2017年1月1日之后创建的会话,依此类推 什么是正确的Rails

我有一个产品ID数组,我想用它来过滤购买会话列表。到目前为止一切顺利:

Session.where('product_id': [23, 32, 17])

我也有一系列的日期,这些日期为每个产品(不同的)指定日期,我甚至应该考虑他们的会话:<代码> [12,2/17,' 1/1 / 17 ',' 20/3 / 17 ' ] < /代码>

换句话说,产品id 23只应考虑用于2017年12月2日之后创建的会话,产品id 32只应考虑用于2017年1月1日之后创建的会话,依此类推


什么是正确的Rails命令,在选择关于想要的产品ID的会话时,还要考虑产品的日期?

< P>这样,链接您的<代码> 子句以满足您的需要。

Session.where('product_id = ? AND date > ?', 23, Time.new(2017, 2, 12))
  .or(Session.where('product_id = ? AND date > ?', 32, Time.new(2017, 1, 17)))

类似这样,将
where
子句链接到您的需求

Session.where('product_id = ? AND date > ?', 23, Time.new(2017, 2, 12))
  .or(Session.where('product_id = ? AND date > ?', 32, Time.new(2017, 1, 17)))

这就是我现在认为的“幼稚”解决方案(我认为)。动态添加日期列(在一种“联接”操作中)然后在另一个where子句中使用列数据可能会更快吗?@dneumark您可能可以通过编程方式生成此列。例如(对注释中的格式错误表示歉意):创建二维数组:
where_子句=[[23',12/2/17'],[32',1/1/17'],[17',20/3/17']
。然后遍历它
where_子句。每个do |(product,date)|
,并应用该子句:
Session.or(Session.where('product_id=?and date>?',product,date))
这就是我现在认为的“幼稚”解决方案(我认为)。动态添加日期列(在一种“联接”操作中)然后在另一个where子句中使用列数据可能会更快吗?@dneumark您可能可以通过编程方式生成此列。例如(对注释中的格式错误表示歉意):创建二维数组:
where_子句=[[23',12/2/17'],[32',1/1/17'],[17',20/3/17']
。然后遍历它
where_子句。每个do |(product,date)|
,并应用该子句:
Session.or(Session.where('product_id=?and date>?',product,date))