我正在尝试将AuthLogic集成到我的rails应用程序中,然后我按照将persistence_token定义为字符串的示例:
https://github.com/binarylogic/authlogic_example
然而,当我在我的ubuntu桌面上使用PostgreSQL 8.4运行它时,我收到以下错误:
ActiveRecord::StatementInvalid in UsersController#index
PGError: ERROR: operator does not exist: character varying = integer
LINE 1: ...* FROM "users" WHERE ("users"."persistence_token" = 21007622...
^
HINT: No operator matches the given name and argument type(s). You might need to add explicit type casts.
: SELECT * FROM "users" WHERE ("users"."persistence_token" = 2100762299) LIMIT 1
我尝试将persistence_token更改为整数,但是当时AuthLogic的其他部分似乎没有更新它。
我确信这一定是一个常见的问题,但谷歌搜索并不是很有帮助,任何想法如何解决这个问题?
Ruby版本:1.8.7 Rails版本:2.3.5 AuthLogic版本:2.1.6
答案 0 :(得分:1)
这是一个问题,因为表中的行的'persistence_token'值为nil。将列设置为值将导致此错误消失。我怀疑它与rails检查表列及其与authlogic的交互方式有关。
答案 1 :(得分:0)
你能展示声明persistence_token的代码吗?
我首先尝试输入演员和转换。在SQL方面,所有这些都可以。
WHERE ("users"."persistence_token" = cast(2100762299 as varchar))
WHERE ("users"."persistence_token" = 2100762299::text)
WHERE ("users"."persistence_token" = text(2100762299))
WHERE ("users"."persistence_token" = 2100762299 || '')
最后一个是隐式强制。它强制PostgreSQL通过将数字连接到空字符串来将数字视为字符串。
但是您可能必须在运行时更改Ruby中的数据类型。
yournumber.to_s