rails构造之间有什么区别:
authentication = Authentication.where(:provider=>omniauth['provider'], :uid=>omniauth['uid'])
authentication = Authentication.find_by_provider_and_uid(omniauth['provider'], omniauth['uid'])
我的问题是,如果我使用第一个构造(.where) - 我无法获得关联。我的模型身份验证'属于'模型用户。如果我使用第一个构造搜索身份验证,我无法通过:authentication.user获取关联用户,但同样的事情适用于第二个版本。
由于Heroku问题,我想使用第一个构造而不是第二个构造: http://docs.heroku.com/database:PGError:ERROR:运算符不存在:字符变化=整数。
答案 0 :(得分:1)
PGError:ERROR:运算符不存在:字符变化=整数。
这不是heroku问题。自8.4或8.3以来Postgresql引入了更严格的类型检查。例如,如果列“position”是整数,则无法编写此sql:
select * from orders where position = '1';
它将返回与您类似的错误。
你可以尝试:
auth = Authentication.find :all, :conditions => ["provider = ? and uid = ?", provider, uid]
答案 1 :(得分:1)
重新发表评论的好答案:
也许在omniauth ['uid']上调用.to_s,所以rails认为它是字符串并将其作为varchar传递给postgres?