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

时间:2009-12-03 10:20:41

标签: ruby-on-rails ruby routes rails-routing

我的routes.rb

中有以下内容
map.resources :novels do |novel|
  novel.resources :chapters
end

通过上面定义的路线,我可以使用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'

感谢。

1 个答案:

答案 0 :(得分: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. 您要搜索的字段应具有数据库索引以获得更好的效果