2009-12-03 35 views
2

其他属性在我的routes.rb访问资源在routes.rb中使用多个id

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

通过上述定义的路由我有以下的,我可以用xxxxx.com/novels/:id/chapters/:id访问的章节。 但这不是我想要的,章节模型有另一个称为数字的字段(它对应于章节号)。我想通过一个类似于 xxxx.com/novels/:novel_id/chapters/:chapter_number的URL来访问每一章。如何在不明确定义命名路由的情况下完成此任务?

现在,我通过使用上述map.resources定义了如下命名的路由这样做:小说

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

感谢。

回答

6

:id可以几乎任何你想要的。所以,离开路由配置不变,并从

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

改变你的行动,(假设你要搜索的是所谓:chapter_no场)

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

还要注意:

  1. 我'使用砰!取景器版本(find_by_chapter_no!而不是find_by_chapter_no)来模拟默认find行为
  2. 您正在搜索应该有更好的性能
  3. 数据库索引字段
+1

我试图做同样的,我有一个用斗气此方法:show_chapter_url(章节)不再起作用。有没有办法解决这个问题?或者我应该发起并使用show_chapter_url(chapter.chapter_no)(或者实际上等同于我自己的应用程序)? – FrontierPsycho 2013-06-22 19:58:07