带有Rails的Array.exists?(对象)之后的SQLException

时间:2010-09-12 22:41:54

标签: ruby-on-rails activerecord

当我试图知道对象是否在数组中时,我有这个奇怪的SQL错误:

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

错误:

  

ActiveRecord :: StatementInvalid(SQLite3 :: SQLException:模糊列名:created_at:SELECT“公告”.id FROM“公告”INNER JOIN“读数”ON“公告”.id =“读数”.announcement_id WHERE(“公告” “。”id“= 3)AND((”读数“.user_id = 1))ORDER BY created_at DESC LIMIT 1)

usersannouncements之间的中间表格为readings,当我在控制台中执行类似user.announcements_read.include?(announcement)的操作时,它可以正常运行

但当我做相反的请求时它可以

puts "YAY" if @announcement.read_by.include?(current_user)

这里发生了什么? 为什么第一个请求在控制台中工作但在应用程序中不起作用? 为什么current_user.announcements_read.include?user.announcements_read没有时会出现SQL错误?

凯文

1 个答案:

答案 0 :(得分:0)

我猜announcements_read是一个命名范围,:order子句看起来像:order => "created_at"。这是不明确的,因为created_at列位于查询中的多个表中。修复它应该很简单 - order子句是一个SQL片段,因此你应该能够在created_at前加上适当的表名。

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