当我试图知道对象是否在数组中时,我有这个奇怪的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)
(users
和announcements
之间的中间表格为readings
,当我在控制台中执行类似user.announcements_read.include?(announcement)
的操作时,它可以正常运行
但当我做相反的请求时它可以:
puts "YAY" if @announcement.read_by.include?(current_user)
这里发生了什么?
为什么第一个请求在控制台中工作但在应用程序中不起作用?
为什么current_user.announcements_read.include?
在user.announcements_read
没有时会出现SQL错误?
凯文
答案 0 :(得分:0)
我猜announcements_read
是一个命名范围,:order
子句看起来像:order => "created_at"
。这是不明确的,因为created_at
列位于查询中的多个表中。修复它应该很简单 - order子句是一个SQL片段,因此你应该能够在created_at
前加上适当的表名。
至于为什么其他方法不会产生错误,也许你有不同的环境?您能查看日志以查看正在生成哪些查询吗?