2011-08-19 102 views
1

有人可以在本声明中指出错误吗?ActiveRecord错误问题

2011-08-19T20:16:05+00:00 app[web.1]: ActiveRecord::StatementInvalid (PGError: ERROR: argument of AND must be type boolean, not type integer 
2011-08-19T20:16:05+00:00 app[web.1]: : SELECT "app_permissions".* FROM "app_permissions" WHERE (user_id = 1,2 AND is_shared = 't' AND app_id = '1')): 
2011-08-19T20:16:05+00:00 app[web.1]: 

代码:

AppPermission.find(:all, :conditions => ["user_id = ? AND is_shared = ? AND app_id = ?", User.find_all_by_facebook_id(@friends_uids).collect { |itm| itm["id"] }, true, @appl_id]) 

由于

回答

9

的错误是在第一/第二AND条件。您可能需要将其更改为:

AppPermission.find(:all, 
    :conditions => ["user_id in (?) AND is_shared = ? AND app_id = ?", 
       User.find_all_by_facebook_id(@friends_uids).collect { |itm| itm["id"] }, 
       true, @appl_id]) 

编辑:你需要IN (?),因为你得到一个集合,而不是只有一个值,看看在你的日志中的最终查询,你会看到它(1,2

+0

为什么我需要'in(?)',因为它可能是'User.find_all_by_facebook_id(@friends_uids).collect {| itm | itm [“id”]}'?如果此声明仅返回一个'User',我的代码正在工作 – glarkou

+1

已更新!它与你的'find_all'方法有关,它检索多个值。 – Serabe

+0

非常感谢! – glarkou

4

尝试改变:

user_id = ? 

user_id IN (?) 

大概,它还没有得到与逗号的错误,它看着“2 AND is_shared ='t'”。