2013-06-19 3 views
0

나는 dev 환경에서 잘 작동하고 생산 환경에서 오류가 발생하는 코드를 가지고있다. 여기있다 :선택에서 Heroku PG 오류

venue.badges.where(:active => true).select([:title, :desc, :bonus]).each do |badge| 

MySQL을 로컬 DB에서 작업하는 동안, 그것은 생산이 발사 :

ActiveRecord::StatementInvalid (PG::Error: ERROR: syntax error at or near "desc" 
: SELECT title, desc, bonus FROM "badges" WHERE "badges"."venue_id" = 22 AND "badges"."active" = 't'): 
LINE 1: SELECT title, desc, bonus FROM "badges" WHERE "badges"."ven... 

정말 여기 뭐가 잘못하지 않습니다.

+0

한 가지 잘못된 열 이름으로 예약어를 사용하려면 따옴표로 이스케이프해야합니다 하나의 데이터베이스를 기반으로 개발하고 또 다른 데이터베이스 위에 배포한다는 것은 통증과 고통에 대한 지름길입니다. 데이터베이스간에 미묘한 차이점이 많으며 ORM이 없으므로 이러한 차이점을 피할 수 있습니다. –

답변

2

DESC는 SQL의 예약어입니다. This list of SQL and PostgreSQL keywords은 좋은 참고 자료입니다. ,

SELECT title, "desc", bonus FROM badges WHERE ... 

그리고 레일에를 오히려 심볼보다 리터럴 문자열로 전달 :

venue.badges.where(:active => true).select([:title, '"desc"', :bonus]).each do |badge| 
+1

또는 더 나은 방법으로, 컬럼의 이름을 예약어가 아닌 이름으로 변경하면 장기적으로 고통 스러울 것입니다. –

+0

대단히 감사합니다. 너 나 많이 도와 줬어! –

관련 문제