2012-02-18 3 views
1

레일을 처음 사용하면서이 작업을 어떻게 할 수 있는지 궁금합니다.레일 리소스 및 커스텀 라우트 충돌 작업하기

http://localhost:3000/businesses/coldfire-gundam 

이 경로 사용 : 그러나

match "/businesses/:permalink", :to => "businesses#show", :as => :business_permalink 

을 나는이 전에이 경로를 배치 할 때 : 나는 URL은 다음과 같이 할에

resources :businesses 

모든 통화/기업/1 (param [: id]로 1) permalink 선언에 걸렸으므로 더 이상 작동하지 않습니다.

어떻게 만들 수 있습니까? 그때 일하니?

답변

2

당신은 /businesses/:id/businesses/:permalink을 차별화 할 수있는 방법이 필요하다.

match '/businesses/:permalink', :to => 'businesses#show`, :constraints => { :permalink => /.*\D/ }, :as => :business_permalink 

/.*\D/가 강제로 : 당신이 다음 간단한 :constraints 트릭을 할해야 항상 숫자가 아닌 것을 포함하여 :permalink을 강제 할 수있는 경우 :id는 항상 숫자로 (물론 당신이 MongoDB를를 사용하지 않는 한) 너무한다 :permalink에 하나 이상의 숫자가 아닌 문자가 포함 된 경우에만 일치하는 경로. 경로 정규 표현식은 처음에 암시 적으로 고정되어 있기 때문에 .*이 필요합니다.

당신이 MongoDB를를 사용하는 일 경우 다음 :id 당신이 당신의 제약으로 /.*\H/를 사용 싶어 당신이 당신의 :permalink 항상 적어도 하나의 비 포함되어 있는지 확인하기 위해 어떤 방법을 원하는 것, 그래서 아마 육각 BSON ID를 할 것이다 -hex 문자.

일단 모두 입력하면 match "/businesses/:permalink"resources :businesses 앞에 넣고 routes.rb에 넣으면됩니다. 모든 것이 잘 작동합니다. 경로는 routes.rb과 동일한 순서로 확인되므로 앞에 match을 입력해야합니다.

1

permalink 경로를 만드는 데 friendly_id 보석을 사용하는 것이 좋습니다. 이것은 대부분의 '마법'을 쉽게 재사용 할 수 있도록 처리 할 것입니다. 보석 및 railscast에 대한

자료 : https://github.com/norman/friendly_id http://railscasts.com/episodes/314-pretty-urls-with-friendlyid

관련 문제