В Rails 3.x как спроектировать представление для вложенного ресурса, который ссылается на родительский ресурс? - PullRequest
1 голос
/ 18 августа 2011

Допустим, у меня есть вложенный ресурс, как в примере с руководством по Rails: http://guides.rubyonrails.org/routing.html#nested-resources

resources :magazines do
  resources :ads
end

Это перенаправляет вызов / magazines / newsweek / ads в индекс AdsController #.В URL-адресе требуется magazine_id ... как мне создать представление, основанное на шаблоне, который используется для индекса Ads #, но также включает контекст родительского ресурса?

Например, всеРодительские ресурсы, у которых есть Реклама, будут иметь список таблиц этих объявлений.Но я бы хотел, чтобы верхняя часть представления включала шаблонную информацию для каждого журнала.Если / magazines / newsweek / ads идет непосредственно к общему индексу AdsController #, как мне заставить это представление #index осознавать необходимость включения шаблона, сгенерированного из модели Magazine?

И если другие модели связаны сads (TelevisionShow has_many: ads), я бы хотел, чтобы AdsController # index по-разному реагировал на них.

EDIT:

Вот как я делал такие вещи в прошлом,происходит через MagazinesController.Допустим, я хочу отдельное действие Magazine # show ... маршруты будут:

resources :magazines 
resources :ads
get "magazines/:id/ads", :controller=>"companies", :action=>"ads"

И контроллер будет:

class MagazinesController < ApplicationController
  def show
    ...
  end

  def ads
    ...
  end

end

А потомЖурнал # ads будет иметь частичную рекламу для объявлений, которые будут разделены между всеми другими типами ресурсов.

Имеет смысл для меня, но этот маршрут кажется каким-то образом DRYer?

1 Ответ

3 голосов
/ 18 августа 2011

Похоже, вы должны работать в контроллере журнала.

#Magazine_controller
def show
  @magazine = Magazine.find(params[:id])
  @ads = @magazine.ads
end

Тогда, по вашему мнению, просто сделайте частичную для вашей коллекции объявлений. Ваша частичная реклама будет сохранена в области рекламы. Итак, по вашему мнению:

<%= render :partial => "ads/ad", :collection => @ads %>

http://guides.rubyonrails.org/layouts_and_rendering.html#using-partials

...