Ruby on rails 数组后的SQLException.exists?(对象)与Rails

Ruby on rails 数组后的SQLException.exists?(对象)与Rails,ruby-on-rails,activerecord,Ruby On Rails,Activerecord,当我试图知道某个对象是否在数组中时,出现了一个奇怪的SQL错误: @announcement = Announcement.first puts "YAY" if current_user.announcements_read.include?(@announcement) 错误: ActiveRecord::StatementInvalid SQLite3::SQLException:不明确的列名:created_at:从公告中选择announcements.id内部连接公告上的读数。id=

当我试图知道某个对象是否在数组中时,出现了一个奇怪的SQL错误:

@announcement = Announcement.first
puts "YAY" if current_user.announcements_read.include?(@announcement)
错误:

ActiveRecord::StatementInvalid SQLite3::SQLException:不明确的列名:created_at:从公告中选择announcements.id内部连接公告上的读数。id=readings.announcement_id,其中announcements.id=3和readings.user_id=1 ORDER BY created_at DESC LIMIT 1

用户和公告之间的中间表格是readings,当我在控制台中执行类似user.announcements\u read.include?announcement的操作时,它会非常有效

但当我提出相反的要求时,它就起作用了:

puts "YAY" if @announcement.read_by.include?(current_user)
这是怎么回事? 为什么第一个请求在控制台中工作而在应用程序中不工作? 为什么当前的_user.announces _read.include?当user.u read未读取时获取SQL错误

Kevin

我猜announcements\u read是一个命名范围,带有一个:order子句,看起来像:order=>created\u at。这是不明确的,因为创建的_at列位于查询中的多个表中。修复它应该很简单-order子句是一个SQL片段,因此您应该能够使用适当的表名作为created_at的前缀

至于为什么其他方法不会生成错误,也许您有不同的环境?您可以查看日志以查看生成了哪些查询吗