2016-08-16 4 views
1

Я начал писать приложение, которое рассматривает книги, статьи и т.д. (название модели: шт) и имеет возможность рассмотреть главы или меньшие секции (разделы, подразделы и подподразделы модели)Как получить доступ к параметрам вложенных ресурсов из родительского контроллера в Ruby on Rails?

Я хочу, чтобы иметь возможность генерировать общий обзор фрагмента, в котором все вложенные разделы, подразделы и подсекции и их атрибуты будут перечислены в одном представлении. Так что мой routes.rb файл выглядит следующим образом:

resources :pieces do 
    resources :sections do 
     resources :subsections do 
     resources :subsubsections 
     end 
    end 
    end 

который я с тех пор узнал, коряво, но слишком поздно для меня. В настоящее время я смог сделать это из подписок, потому что он имеет доступ ко всем родительским параметрам (штука_иде, section_id и т. Д.). Но это означает, что я должен спрыгнуть вниз по дереву в представление «Подгруппа», а затем перейти оттуда, тогда как мне хотелось бы получить доступ ко всем этим параметрам с контроллера Piece, чтобы я мог напрямую ссылаться на представление Piece на более общий обзор, без необходимости проходить весь путь вниз по цепочке.

Прошу прощения, если это простой вопрос, я только недавно начал работу.

Мои модели, как так:

И так, как я получить доступ к общему обзору сейчас использую указательное действие контроллера подподразделы:

def index 
    @piece = Piece.find(params[:piece_id]) 
    @section = @piece.sections.find(params[:section_id]) 
    @subsection = @section.subsections.find(params[:subsection_id]) 
end 

Моего взгляд обращается к нему, как это:

<p><%= link_to "'General Piece Overview", piece_section_subsection_subsubsections_path(@piece, @section, @subsection), class: 'section_name' %></p> 

Имеет ссылку на проект, если это помогает:

https://github.com/kingdavidek/StuddyBuddy

ответ

0

Ваш вопрос имеет некоторое внутреннее напряжение; вы говорите, что хотите получить доступ к вложенным параметрам из вашего PieceController, но если запрос был перенаправлен на PieceController, эти вложенные параметры не будут присутствовать. Когда присутствуют вложенные параметры, запрос будет перенаправлен на наиболее определенный класс контроллера, для которого запрос предоставляет параметр.

Если вопрос можно перефразировать как «как, изнутри PieceController я могу сгенерировать что-то вроде оглавления?» ответ выглядит примерно так.

В PieceController:

def show 
    @piece = Piece.find(params[:id]).include(sections: {subsections: :subsubsections}}) 
end 

В app/views/pieces/show.html.erb

<% @piece.sections.each do |section| %> 
    <%= link_to piece_section_path(@piece, section), section.title %> 
    <% section.subsections.each do |subsection| %> 
    <%= link_to piece_section_subsection_path(@piece, section, subsection), subsection.title %> 
    <% subsection.subsubsections.each do |subsubsection| %> 
     <%= link_to piece_section_subsection_subsubsection_path(@piece, section, subsection, subsubsection), subsubsection.title %> 
     <% end %> 
    <% end %> 
    <% end %> 
<% end %> 

Это делает некоторые предположения, но, надеюсь, идея ясна.

+0

Привет, Спасибо, что ответили! Насколько я понимаю, невозможно сделать то, что я делал изначально, и это нормально. Я попытался реализовать то, что вы делаете, используя метод includes, но я получаю ** «NoMethodError в PiecesController # show», неопределенный метод 'includes 'для # . ** У вас есть идея, почему это ? – Kingdavidek