2011-01-27 3 views
1

SO URL과 마찬가지로 URL에 기사 제목을 추가하고 싶습니다. 나는 그러나 나는 그것이 약간 중복 찾아 내 또 다른 질문레일 루트 및 URL 도우미의 중복 줄이기

# routes.rb 
match '/articles/:id/:title' => 'articles#show', :as => :article_with_title 

# articles/index.html.erb 
link_to article.title, article_with_title_path(article, :title => article.title.downcase.gsub(/[^a-z0-9]+/,' ').strip.gsub(/\s+/,'-')) 

그것은 작동에 answer에서 다음 설정을 사용하도록 제안했다. 그것을 더 좋게 만드는 방법이 있습니까? 여러 경로를 처리하는 보편적 인 방법은 무엇입니까?

match '/articles/:id/:title' => 'articles#show' 
match '/users/:id/:name' => 'users#show' 
etc. 

비고 :

  1. 는 현재 다음과 같은 노선들은 잘 작동 : 조건에 /article/:id/:action, /article/:id/:title은 그 기사가 제목 edit, show, index, etc. 내가 경로를 명시 적으로 :id이 포함되어 있기 때문에 friendly_id가 여기에 불필요한 생각
  2. 을 가질 수 없습니다 .
  3. 내가 보는 것처럼
  4. 는 SO /users/:action/:id

답변

1

모델에서 to_param을 그냥 덮어 쓰십시오. 메모리에서 테스트되지 않은 예 :

def to_param 
    self.id + "-" + self.name.parameterize 
end 

이 방법을 사용하면 라우터를 변경할 필요가 없습니다, 또한 Model.find(params[:id]) 또는 유사한을 계속 사용할 수 있다는 것을 의미합니다.

기본적으로 Railscast가 다른 대답에서 언급 한 것과 핵심은 friendly_id도 마찬가지입니다.

1

라이언 베이츠가 URL 대신에, 모델의 이름, 또는 다른 속성을 사용하여 뛰어난 screencast했다 질문 /question/:id/:title, /posts/:id/:action에 대한 사용자 /users/:id/:name에 대해 서로 다른 경로를 사용합니다 이드.