Rails - 主类,子类,如何获取子类的所有记录
在使用 STI 时,我试图获取特定 :type 的所有页面。
我在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 类不应该获取所有带有:type 为“Blog”的页面吗?相反,它会获取所有页面,无论类型如何。我也尝试过 @pages = Page.where(:type => "Blog")
我正在访问 URL http://localhost:3000/blog
这是我的路线
resources :pages do
collection do
get :gallery
get :list
end
end
resources :blog, :controller => :pages
In using STI, I'm trying to get all pages of a specific :type.
I have a main class in pages_controller.rb
class PagesController < ApplicationController
def index
@pages = Page.all
end
end
Below that, I have another class in pages_controller.rb
class Blog < Page
def index
@pages = Blog.all
end
end
Shouldn't the Blog class get all pages with a :type of "Blog"? Instead it is getting all pages regardless of the type. I've also tried @pages = Page.where(:type => "Blog")
I'm accessing the URL http://localhost:3000/blog
Here are my routes
resources :pages do
collection do
get :gallery
get :list
end
end
resources :blog, :controller => :pages
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
您需要为
app/models
目录中的每种类型定义一个类:如果您希望一个控制器同时获取它们:
因此本质上,
all
方法返回以下实例你调用它的班级。但是:我建议您为每种类型使用单独的控制器。它们是不同的资源,应该这样对待。使用像 InheritedResources 这样的工具来耗尽你的控制器。
You need to define a class for every type in
app/models
directory:If you want one controller to get them both:
So in essence, the
all
-method returns instances of the class you called it on.However: I would recommend you to use separate controller for each type. They are different resources and should be treaded as such. Use tools like InheritedResources to dry up your controllers.