2

我的 routes.rb 中有以下内容

map.resources :novels do |novel|
  novel.resources :chapters
end

通过上面定义的路线,我可以使用xxxxx.com/novels/:id/chapters/:id. 但这不是我想要的,Chapter 模型还有一个名为 number 的字段(对应于章节编号)。我想通过一个类似于 xxxx.com/novels/:novel_id/chapters/:chapter_number. 如何在不明确定义命名路由的情况下完成此操作?

现在我正在通过使用以下命名路由定义在 map.resources 上执行此操作:novels

map.chapter_no 'novels/:novel_id/chapters/:chapter_no', :controller => 'chapters', :action => 'show'

谢谢。

4

1 回答 1

6

:id几乎可以是你想要的任何东西。因此,保持路由配置不变并更改您的操作

class ChaptersControllers
  def show
    @chapter = Chapter.find(params[:id])
  end
end

to (假设您要搜索的字段称为:chapter_no

class ChaptersControllers
  def show
    @chapter = Chapter.find_by_chapter_no!(params[:id])
  end
end

另请注意:

  1. 我在用砰!finder 版本(find_by_chapter_no!而不是find_by_chapter_no)来模拟默认find行为
  2. 您正在搜索的字段应该有一个数据库索引以获得更好的性能
于 2009-12-03T10:54:24.253 回答