0

我试图了解构建一个相当简单的关系的最佳方式。我在 JobCategories 模型中有一个 Job 模型和一个 Category 模型,它们之间具有 has_many 关系。

我想要一个列出特定类别的所有工作的页面。提取此数据的逻辑应该在类别控制器上(在显示操作上),还是应该在作业控制器上创建一个类别方法?我的直觉告诉我它应该在 Category 方面,因为 Category 有 Job,但是 Job 具有为给定类别提取所有 Job 的逻辑感觉不正确。

话虽如此,如果我希望 URL 是更具体的工作,例如:

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

我将如何构建路线,使其看起来像上面那样,而不是

domain/categories/:id

这就是你会得到的resources :categories, only: [:show]

谢谢!

4

1 回答 1

2

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

至于路线,您将无法使用resources :categories

一种方法是

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

slug 将在您的参数中传递。

这将产生这样的路线

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

更新

:slug只是漂亮 url 的一个例子。

在您的情况下,您希望拥有:category_name. 这将通过params[:category_name].

当我重新阅读您的问题时,我确实开始思考的一件事是您想要显示特定类别的工作列表。像这样的 url 路径/jobs/:id/{category-name}实际上不应该显示作业列表,因为您指定的id是一个特定的作业。我认为您要获取的网址更符合/jobs/{category-name}. 我对么?

更新 2

我建议您阅读此Ruby On Rails 路由

更新 3

既然您确实想要一个更像/jobs/{category-name}

你的路线应该是这样的

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

祝你的项目好运!:D

于 2013-04-22T20:10:12.497 回答