2011-02-25 3 views
2

레일에서 검색 엔진 친화적 인 URL에이 방법을 사용하고 있습니다. - http://jroller.com/obie/entry/seo_optimization_of_urls_in이유 : 레일즈의 id가 Postgresql에서 작동하지 않지만 MySQL에서 작동합니까?

내 모델은 다음과 같습니다.

class Listing < ActiveRecord::Base 
    def to_param 
    "#{id}-#{title.parameterize}" 
    end 
end 

이 항목은 MySQL에서는 작동하지만 Postgresql에서는 작동하지 않습니다.

은 내가 오류입니다 :

액티브 :: StatementInvalid (PGError : ERROR : 정수에 대한 잘못된 입력 구문 : "16 대학 역 - 아파트" : "("평면도 "WHERE SELECT * FROM ASCAR, ASC ASCET, ASC ASC, ASC ASC, 가격 ASC) :

ActiveRecord는 Postgresql 찾기에서 .to_i를 수행하지 않습니까? 예를 들어, "floor_source"는 E-16-college-station-

+0

당신이 게시 한 코드에 문제가 있는지 확실하지 않습니다. 어쩌면 컨트롤러 또는 마이 그 레이션에서 ... 아마 굼벵이를 관리하기 위해 friendly_id gem 또는 stringex를 시도해 볼 것을 제안 할 것입니다. 좀 봐 – andrea

답변

4

레일은 자동으로 일부 방법에 대한 귀하의 매개 변수에 Listing.find(params[:id]) 같은 정수가 매개 변수로 예상된다 주로 사람들을, to_i를 호출합니다.

그러나, 매개 변수로 문자열을 수용 할 수있는 검색 방법의 다른 유형, 당신은 수동으로 MySQL의에 문제가하지 않는 이유는 MySQL이 무엇을 수행한다는 것입니다 to_i

Listing.find_by_id(params[:id].to_i) 
Listing.find(:conditions => ["id = ?", params[:id].to_i]) 

를 호출해야합니다 실제로 to_i이 될 것입니다 (예 : 데이터베이스 어댑터 문제가 아니라 실제 데이터베이스 서버의 기능).

+0

나는 이것이 틀렸다라고 생각한다; 나는 컨트롤러 호출 find (params [: id])를 가지며 사용자가 입력 한 URL에 동일한 오류가 발생했습니다. 3.0.9의 ActiveRecord finder_methods.rb에는 .to_i가 없습니다. 아마도 레일스는이 작업을 수행 했었지만 더 이상 수행하지 않았으며 MySQL이 너무 유명하기 때문에 아무도 알아 차리지 못했을 것입니다. –

관련 문제