在使用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
答案 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之类的工具来清理控制器。