AuthLogic + PostgreSQL 8.4:将persistence_token定义为字符串,然后用作整数

时间:2010-11-29 04:25:15

标签: ruby-on-rails postgresql authlogic

我正在尝试将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

2 个答案:

答案 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