2013-04-22 68 views
0

我想了解建立一个相当简单的关系的最佳方法。在JobCategories模型中,我有一个Job模型和一个具有has_many关系的类别模型。Rails路线架构

我想有一个页面列出特定类别的所有作业。应该将逻辑拉到类别控制器上(在show action上),还是应该在Job Controller上创建一个类别方法?我的直觉告诉我,它应该在类别方面,因为一个类别有工作,但它不正确的是,一个工作将有逻辑拉动给定类别的所有工作。

话说回来,如果我想要的网址是东西是更多的就业具体的,如:

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

我将如何构建的路径,以便它读起来就像上面,而不是

domain/categories/:id 

这是你与resources :categories, only: [:show]

由于得到了什么!

+0

它确实应该在类别方面。既然你想要所有具有该类别的工作。如果在工作方面,你需要知道工作,然后才能找出类别 – Doon 2013-04-22 19:51:00

+0

谢谢 - 关于如何构建路线的任何想法? – cman77 2013-04-22 20:09:37

回答

2

对于一个漂亮的slu I,我建议在您的类别模型上使用FriendlyId

至于路线,你会不会使用resources :categories

一种方式做得到想要的路线将是

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

蛞蝓将在您的参数传递。

这将产生一个路线是这样

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

UPDATE

:slug仅仅是漂亮的URL的例子。

在你的情况下,你想有:category_name。这将通过params[:category_name]传递到您的控制器。

当我重新阅读您的问题时,我开始思考的一件事是您想要显示特定类别的作业列表。像/jobs/:id/{category-name}这样的url路径实际上不应显示作业列表,因为您指定的是id这意味着特定的作业。我认为你想要得到的网址更多的是/jobs/{category-name}。我对么?

更新2

我建议你阅读这Ruby On Rails Routing

更新3

既然你想要做一个URL更像/jobs/{category-name}

你的路线应该像这

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

祝您的项目顺利! :D

+0

谢谢 - 你的例子中'/ collaborators /'来自哪里? – cman77 2013-04-24 12:00:15

+0

哎呀,这是我的坏...我用它在我的一个应用程序作为例子,忘记编辑出 – 2013-04-24 13:17:45

+0

Thx。我应该在路线中使用':/ slug'吗?如果我这样做,运行耙路线时不会获得_path或url_ shortcut。 – cman77 2013-04-24 14:58:40