2

私の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。名前付きルートを明示的に定義せずにこれを達成するにはどうすればよいですか?

現在、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. 私は強打を使用しています!デフォルトの動作をシミュレートするためのファインダーバージョン(find_by_chapter_no!の代わりに)find_by_chapter_nofind
  2. 検索するフィールドには、パフォーマンスを向上させるためのデータベースインデックスが必要です。
于 2009-12-03T10:54:24.253 に答える