2010-07-27 4 views

답변

10

에 대한이 문서의 섹션은 "리디렉션 방법"도움이되지만 I 수 그것에 조금을 만들고 싶다. 당신이 당신의 PARAMS에 슬러그 변수를 처리해야하고 싶지 않은 경우

, 당신은 정말 그렇게 같은 경로를 모델

 
def to_param 
    "#{id}/#{title}" 
end 

에서 그 방법 to_param을 정의하고 설정해야합니다

resources :posts, :id => /[0-9]+\/.+/

그 방법은 링크 정의는 아주 정상처럼 보이는 : 아주 간단한

link_to post.title, post_url(post)

을 : http://www.miguelsanmiguel.com/2011/03/17/slug-that-slash

+0

이 아닌 "id/slug"형식을 사용하는 레일에 깨끗한 URL을 구현하려고 시도하면 레일 3에 이러한 중단이 발생할 수 있습니까? 정확한 코드로 실행하는 데 문제가 있습니다. – brittohalloran

+0

BTW -'to_param' 메서드에서 "-"또는 "_"를 사용하면 멋지지만, "/"를 사용하면 나옵니다 (당연히 정규식을 편집해야합니다). – brittohalloran

+0

먼저 : 위 코드가 실행됩니다. Rails3에서. 둘째 : 귀하의 슬러그 (게시물 제목)에 슬래시가있는 것은 좋은 생각이 아닙니다. URL에서 더 깊은 레벨을 나타내며 중첩 된 리소스와 호환되지 않기 때문에 어떻게 든 대체해야합니다. 사실, 우리는 [예약 된 URL 문자] (http://www.blooberry.com/indexdot/html/topics/urlencoding.htm)로 처리해야합니다. 나는 다음과 같은 것을 제안한다 : def to_param; "# {id}/# {name_without_reserved_url_characters}"; 끝 '. 큰 포인트! – miguelsan

2

Friendly ID을 보시면 ID가 완전히 사라지고 슬러그를 사용합니다. Rails 3와 호환됩니다.

routes.rb (당신이 필요로 당신이 원하는 대체)에서
def to_param 
    "#{id}/#{slug}" 
end 

match "/expenses/:id/:slug" => "expenses#show", :as => :expense 

귀하의 LINK_TO가 같아야합니다 : 난 그냥 지금이 필요하지 않습니다이 시도

3

확인 이 지금

= link_to "something", expense_url(:id => expense.id, :slug => expense.slug) 

희망이 조금 도움이