条件可以走多远?

时间:2015-09-20 12:51:59

标签: ruby-on-rails ruby postgresql

我正在使用where语句来提取一些条件的记录。

目前它看起来像这样:

humans.where("? <= created_at AND created_at <= ?", value.days.ago.beginning_of_day, value.days.ago.end_of_day)

我想知道在没有无效的情况下我可以将它扩展到哪里:

humans.where("? <= created_at AND created_at <= ? AND subscribed = ? AND provider != ?", value.days.ago.beginning_of_day, value.days.ago.end_of_day, true, 'twitter')

这还能用吗?像Postgres这样的查询是否兼容?

1 个答案:

答案 0 :(得分:0)

在查询中添加另一个AND子句是完全正常的。这应该工作。我喜欢rails语法,所以我将可以使用rails语法的部分分开到一个单独的部分:

humans.where("? <= created_at AND ....", value.days.ago.beginning_of_day, true, 'twitter')
      .where(subscribed: value.days.ago.end_of_day)

事实上,如果你更喜欢这种语法,你可以将更多的查询转换为它(大概就是这样):

humans.where(Human.arel_table[:created_at].gteq(value.days.ago.beginning_of_day))
      .where(Human.arel_table[:subscribed].lteq(value.days.ago.end_of_day))
      .where(subscribed: true)
      .where(provider: 'twitter')