Как построить запрос Active Recond для действия show в контроллере вложенного ресурса?

У меня есть две модели: книги и главы, где в книге много глав. Я настроил маршрут следующим образом:

match 'book/:book_title/:chapter/:chapter_title' => 'chapter#show', :as => "chapter"

и делегирование контроллеру глав, показ действий работает нормально.

Проблема для меня сейчас состоит в том, чтобы получить эту главу в контроллере шоу через книгу. Как это сделать, если идентификаторы для запроса не являются первичными ключами?

Спасибо!


person lyuba    schedule 28.07.2011    source источник


Ответы (1)


Вы можете загружать главы через книги следующим образом:

@book = Book.find_by_title(params[:book_title])
@chapter = @book.chapters.find_by_title(params[:chapter_title])

Примечание: find_by_* работает для любого атрибута базы данных в этой модели.

person Andrew Nesbitt    schedule 28.07.2011
comment
Я потратил некоторое время, пытаясь понять, почему это не работает, и оказалось, что проблема была в default_scope, которую я использую в родительской модели. Я писал это как default_scope where(:attribute => :value), что приводило к неправильным результатам с использованием find_by_*. Я изменил его на default_scope :conditions => {:attribute => :value}, и теперь он работает нормально. Спасибо! - person lyuba; 28.07.2011