Доступ к ресурсу в rout.rb с использованием атрибутов, отличных от Id - PullRequest
2 голосов
/ 03 декабря 2009

В моих маршрутах есть следующее. 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'

Спасибо.

1 Ответ

6 голосов
/ 03 декабря 2009

: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_no) для имитации поведения по умолчанию find
  2. Поле, которое вы ищете, должно иметь индекс базы данных для лучшей производительности
...