使用Id以外的属性访问routes.rb中的资源

Swa*_*y g 2 ruby routes ruby-on-rails rails-routing

我的routes.rb中有以下内容

map.resources :novels do |novel|
  novel.resources :chapters
end
Run Code Online (Sandbox Code Playgroud)

通过上面定义的路由,我可以使用访问章节xxxxx.com/novels/:id/chapters/:id.但这不是我想要的,章节模型有另一个叫做数字的字段(对应章节编号).我想通过URL来访问每一章 xxxx.com/novels/:novel_id/chapters/:chapter_number.如何在不明确定义命名路由的情况下完成此操作?

现在我通过使用以下命名路径定义ABOVE map.resources:novels来做到这一点

map.chapter_no 'novels/:novel_id/chapters/:chapter_no', :controller => 'chapters', :action => 'show'
Run Code Online (Sandbox Code Playgroud)

谢谢.

Sim*_*tti 6

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

class ChaptersControllers
  def show
    @chapter = Chapter.find(params[:id])
  end
end
Run Code Online (Sandbox Code Playgroud)

to(假设您要搜索的字段被调用:chapter_no)

class ChaptersControllers
  def show
    @chapter = Chapter.find_by_chapter_no!(params[:id])
  end
end
Run Code Online (Sandbox Code Playgroud)

另请注意:

  1. 我正在使用爆炸!finder版本(find_by_chapter_no!而不是find_by_chapter_no)模拟默认find行为
  2. 您正在搜索的字段应具有数据库索引以获得更好的性能