2011-08-19 108 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'」。