Rails - 主类,子类,如何用子类获取所有记录

时间:2010-12-11 08:06:31

标签: ruby-on-rails controller routes single-table-inheritance

在使用STI时,我正在尝试获取特定类型的所有页面。

我在pages_controller.rb

中有一个主类
class PagesController < ApplicationController

  def index
    @pages = Page.all
  end

end

在下面,我在pages_controller.rb中有另一个类

class Blog < Page

    def index
        @pages = Blog.all   
    end

end

Blog类不应该使用:“Blog”类型获取所有页面吗?相反,无论类型如何,它都会获得所有页面。我还试过@pages = Page.where(:type => "Blog")我正在访问网址http://localhost:3000/blog

这是我的路线

    resources :pages do
        collection do
            get :gallery
            get :list
        end     
    end
    resources :blog, :controller => :pages

1 个答案:

答案 0 :(得分:1)

您需要为app/models目录中的每个类型定义一个类:

# app/models/page.rb
class Page < ActiveRecord::Base
end

# app/models/blog.rb
class Blog < Page
end

如果你想让一个控制器得到它们:

if blog? # implement this method yourself
  @blogs = Blog.all
else
  @pages = Page.all
end

因此,实质上,all - 方法返回您调用它的类的实例。

但是:我建议你为每种类型使用单独的控制器。它们是不同的资源,应该这样处理。使用InheritedResources之类的工具来清理控制器。