对多个模型使用相同的视图

时间:2013-04-01 01:54:07

标签: ruby-on-rails helper rails-activerecord view-helpers

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

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

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

但是,当通过以下方式链接到页面时:/ pages / 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

-@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

1 个答案:

答案 0 :(得分:0)

首先添加'has_one:category,:through =&gt; :部分'到你的页面模型

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

接下来将它们分成几部分。

在sections文件夹中创建一个名为_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}

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