首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >带有连接表的ActiveRecord无歧义查询

问带有连接表的ActiveRecord无歧义查询
EN

Stack Overflow用户
提问于 2019-11-14 02:49:14
回答 1查看 371关注 0票数 0

我正在尝试合并两个常见的活动记录查询。

  • 我需要在日期字段上执行where子句
  • 我需要连接两张桌子

因为我要加入它们,所以我需要指定列的表,这两个表都有一个列,created_at。

我基本上需要把这两个答案结合起来:

ActiveRecord联接抛出列中的where子句是不明确的错误- Rails 5.1

代码语言:javascript
复制
    @projects = @projects.joins(:categories).where(categories: { id: params[:category_id] }) if params[:category_id].present?

在今天之前

代码语言:javascript
复制
MyModel.where("created_at < ?", 2.days.ago)

我现在要说的是:

代码语言:javascript
复制
Train.joins(:schedule).where('created_at >= ?', DateTime.now - 7.days)

返回:

代码语言:javascript
复制
Mysql2::Error: Column 'created_at' in where clause is ambiguous: SELECT 
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-11-14 03:18:46

它是模棱两可的,因为两个表都有created_at,并且不知道应该查看哪个表。

为了在具有相同列名的联接表上指定一个条件,您可以执行如下操作.

代码语言:javascript
复制
Train.joins(:schedule).where(trains: { created_at: DateTime.now - 7.days })

或者..。

代码语言:javascript
复制
time_range = DateTime.now - 7.days
Train.joins(:schedule).where('trains.created_at' => time_range)

您还可以使用作用域以更干净的方式完成相同的任务。在加入之前,最好在Train上实现WHERE子句。

参考文献

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58848665

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档