2013-04-22 1 views
0

나는 아주 간단한 관계를 설계하는 가장 좋은 방법을 이해하려고 노력하고 있습니다. 나는 JobCategories 모델에서 그들 사이에 has_many 관계를 가진 Job Model과 Category Model을 가지고있다.레일 루트 아키텍처

특정 카테고리의 모든 작업을 나열하는 페이지를 갖고 싶습니다. 이 데이터를 가져 오는 로직이 (표시 작업시) 범주 컨트롤러에 있어야합니까? 아니면 작업 컨트롤러에서 범주 메서드를 만들어야합니까? 나의 직감은 Category가 Jobs을 가지고 있기 때문에 그것이 카테고리 측면에 있어야한다고 말해 주지만 Job이 주어진 카테고리에 대한 모든 Job을 끌어 올 수있는 논리를 가지고 있다고 느끼지 않는다.

반대로, 그것은 위와 같이 읽을 수 있도록 내가 경로를 구성 할 방법

domain/jobs/:id/{category-name} (for SEO purposes) 

:

내가 원하는 경우 URL이 같은 더 작업 특정 무언가로 그런 말로 미루어
domain/categories/:id 

당신이 resources :categories, only: [:show]

덕분에 얻을 것 것입니다!

+0

정말 카테고리 측면에 있어야합니다. 당신이 그 범주에 속한 모든 직업을 원하기 때문입니다. 카테고리를 찾으려면 직업을 알고 있어야합니다. – Doon

+0

감사합니다. 경로 구성 방법에 대한 의견이 있으십니까? – cman77

답변

2

예쁜 슬러그 때문에 카테고리 모델에 FriendlyId을 사용하시기 바랍니다. 이 슬러그이 매개 변수에 전달됩니다

resources :jobs, only: [] do 
    member do 
    get '/:slug' => 'categories#some_action' 
    end 
end 

는 경로에 관해서는, 당신은 할 resources :categories

방법 중 하나를 사용하여 원하는 경로를받지 않습니다.

:slug 꽤 URL의 예에 불과이

GET /jobs/:id/:slug(.:format) categories#some_action 

UPDATE 같은 경로를 얻을 것입니다.

귀하의 경우에는 :category_name이 필요합니다. 그것은 params[:category_name]을 통해 컨트롤러로 전달됩니다.

내가 질문을 다시 읽을 때 생각한 한 가지 점은 특정 카테고리에 대한 작업 목록을 표시하려고한다는 것입니다. 특정 작업을 의미하는 id을 지정하면 /jobs/:id/{category-name}과 같은 URL 경로에 실제로 작업 목록이 표시되지 않아야합니다. 나는 당신이 얻고 자하는 URL이 /jobs/{category-name}의 줄에 더 가깝다고 생각합니다. 나 맞아?

업데이트 2

난 당신이 더 같은 /jobs/{category-name}

당신이있는 거 경로가 같아야 URL을 싶지 않았기 때문에이 Ruby On Rails Routing

UPDATE 3

을 읽으십시오 이

resources :jobs, only: [] do 
    collection do 
    get '/:category_name' => 'categories#some_action' 
    end 
end 

프로젝트에 대한 행운을 빕니다! : D

+0

감사합니다. '/ collaborators /'는 어디에서 왔습니까? – cman77

+0

내 잘못 이었어. 예를 들어서 내 응용 프로그램 중 하나에서 사용했는데 편집을 잊어 버렸습니다. –

+0

Thx. 말 그대로':/slug'를 사용해야합니까? 그렇게하면 레이크 루트를 실행할 때 _path 또는 url_ 단축키가 생기지 않습니다. – cman77