2013-04-01 6 views
0

У меня есть модель «раздела» и модель «страница» с относительными контроллерами и хотели бы, чтобы оба отображали один и тот же вид. Я пытаюсь получить категорию, показываю ли я страницу или раздел.Использование одного и того же представления для нескольких моделей

На странице категории указаны ссылки.

Он рендериться правильно при связывании секции через:/разделы/8

Однако, при переходе по ссылке на страницу с помощью:/страниц/2

Я получаю ошибку: «неопределенный метод` категория» для # "в" if @ page.category "части помощника.

page.rb

class Page < ActiveRecord::Base 
    attr_accessible :skin_id, :section_id, :name, :title, :content 

    belongs_to :skin 
    belongs_to :section 
    validates_presence_of :skin 
    validates_presence_of :section 
end 

section.rb

class Section < ActiveRecord::Base 
    attr_accessible :category_id, :skin_id, :page, :name, :title, :content 

    has_many :pages 

    belongs_to :category 
    belongs_to :skin 

    validates_presence_of :category 
    validates_presence_of :skin 
    validates_presence_of :name 
    validates_presence_of :title 
end 

pages_helper.rb

module PagesHelper 

    def category 
    if @page.category 
     @page.category 
    else 
     @page.section.category 
    end 
    end 
end 

page.html.haml

[email protected] = Section.all 
%nav#side 
    %ul 
    [email protected] do |section| 
     -if section.category == category 
     %li 
      = link_to section.title, section 
      %ul 
      -section.pages.each do |page| 
       %li 
       = link_to page.title, page 

ответ

0

Первого добавить 'has_one: категория,: через =>: раздел' к вашей странице модели

class Page < ActiveRecord::Base 
    attr_accessible :skin_id, :section_id, :name, :title, :content 

    belongs_to :skin 
    belongs_to :section 

    has_one :category, :through => :section 

    validates_presence_of :skin 
    validates_presence_of :section 
end 

Следующим разбить их на обертоны.

Создайте файл с именем _section.html.haml в папке разделов. Затем сделайте следующее

_section.html.haml

%li 
    = link_to section.title, section 
    %ul 
     -section.pages.each do |page| 
     %li 
      = link_to page.title, page 

, то ваш page.html.haml

%nav#side 
    %ul 
    [email protected] do |section| 
     -if section.category == category 
     = render :partial => "sections/setion", :locals => {:section => section} 

Теперь вы должны иметь возможность повторно использовать секции частичного и вы должны быть в состоянии доступ к прослойке категории со страницы.

+0

Работает как очарование! Благодаря! –

Смежные вопросы