0

我有一个带有相关控制器的“部分”模型和一个“页面”模型,并且希望两者都呈现相同的视图。无论是渲染页面还是部分,我都在尝试获取类别。

在页面中,通过部分引用类别。

通过以下方式链接到某个部分时,它会正确呈现:/sections/8

但是,当通过以下方式链接到页面时:/pages/2

我在助手的“if @page.category”部分收到错误:“# 的未定义方法 `category'”。

页面.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

部分.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

-@sections = Section.all
%nav#side
  %ul
    -@sections.each do |section|
      -if section.category == category
        %li
          = link_to section.title, section
          %ul
            -section.pages.each do |page|
              %li
                = link_to page.title, page
4

1 回答 1

0

首先将 'has_one :category, :through => :section' 添加到您的页面模型中

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
    -@sections.each do |section|
      -if section.category == category
        = render :partial => "sections/setion", :locals => {:section => section}

您现在应该能够重用部分部分,并且应该能够从页面访问类别海峡。

于 2013-04-01T01:59:45.290 回答