Rails 4:列引用"updated_at"与Postgres不明确

Ton*_*yGW 5 ruby postgresql datetime ruby-on-rails-4

我试图用' updated_at'字段的DateTime范围查询数据库.前端在JSON数组中发送查询:

["2015-09-01 00:00:00","2015-10-02 23:00:00"]
Run Code Online (Sandbox Code Playgroud)

在Rails控制器中,我使用以下方法将两个字符串解析为DateTime:

start_date = DateTime.parse(params[:date_range_arr][0])
end_date = DateTime.parse(params[:date_range_arr][1])

#...
@events = @events.where('updated_at BETWEEN ? AND ?,
       start_date, end_date
)
Run Code Online (Sandbox Code Playgroud)

查询显示:

WHERE (updated_at BETWEEN '2015-09-01 00:00:00.000000' AND '2015-10-02 23:00:00.000000')
Run Code Online (Sandbox Code Playgroud)

错误是:

ActionView::Template::Error (PG::AmbiguousColumn: ERROR:  column reference "updated_at" is ambiguous
LINE 1: ...texts"."id" = "events"."context_id" WHERE (updated_at...
Run Code Online (Sandbox Code Playgroud)

小智 9

您是否有任何机会在事件模型或上面的代码中包含原始问题中包含的连接或包含的默认范围?

无论哪种方式,您只需要更具体地查询您的查询,如下所示:

#...
@events = @events.where('events.updated_at BETWEEN ? AND ?,
   start_date, end_date
)
Run Code Online (Sandbox Code Playgroud)

  • 我希望有一种方法可以让它选择主表作为被引用的内容(90% 的时间 - 这里是“事件”),除非我们另外指定 - 可能会在 dev 的控制台输出中添加一行关于它的信息以帮助故障排除 - 但不会因为大声喊叫而“崩溃”。还有一种情况,我们必须在由这个“功能”创建的 where 语句中下拉到 SQL 类型的查询。就好像源代码编写者忘记了目标是 Web 脚本功能 - 而不是 C++ 风格的绝对特异性。 (2认同)