2010-11-29 2 views
3

으로 사용, 나는 문자열로 persistence_token 정의하는 예를 다음 :AuthLogic + PostgreSQL을 8.4 : 문자열로 정의 persistence_token, 나는 내 레일 응용 프로그램에 AuthLogic을 통합하기 위해 노력하고있어 정수

https://github.com/binarylogic/authlogic_example

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의 다른 부분을 보였다 : 내 우분투 바탕 화면에 PostgreSQL을 8.4을 실행할 때

그러나 나는 다음과 같은 오류가 발생합니다.

나는 이것이 일반적인 문제 여야한다고 확신하지만 주변에 인터넷 검색은 매우 도움이되지 않았다, 어떤 아이디어가 이것을 해결하는 방법?

루비 버전 : 1.8.7 레일 버전 : 2.3.5 AuthLogic 버전 : 2.1.6

+0

Authlogic을 처음 시도했을 때도 동일한 문제가있었습니다. 나는 진짜 해결책을 찾지 못했지만, 처음부터 다시 시작한 프로젝트는 나를 위해 고쳐졌습니다. – Raunak

+0

우리는이 문제도 있지만, rspec으로 테스트 할 때만 그렇습니다. 실제 응용 프로그램은 정상적으로 작동합니다. – mcr

+0

Ruby의 어떤 버전입니까? 레일스는 1.8.7 또는 1.9.2가 필요합니다. Rails의 어떤 버전입니까? 3.0.3이 현재 버전 인 것 같습니다. AuthLogic의 어떤 버전입니까? 2.1.6이 최신 인 것 같습니다. PostgreSQL은 9.0.2 버전이지만 문제의 근원에 있다고는 생각하지 않습니다. –

답변

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에서 런타임에 데이터 유형을 변경해야 할 수도 있습니다.

1

테이블의 행에 'persistence_token'값이 nil이므로이 문제가 발생합니다. 열을 값으로 설정하면이 오류가 사라집니다. 레일이 테이블 열과 authlogic과의 상호 작용을 검사하는 방식과 관련이 있다고 생각합니다.