2012-10-11 30 views
0

我用Mongoid和Rails 3,和我有以下的单表继承:在Mongoid中,如何排除基本控制器中的继承模型对象?

class Post 
    include Mongoid::Document 
    field :title, type: String 
    field :content, type: String 
end 

有一个模型“第”从帖子继承:

class Article < Post 
    field :source, type: String 
end 

我是新手尝试STI 。我了解到“一个控制器”对于基础和继承模型来说是一个很好的设计。所以我有PostsController这样

class PostsController < ApplicationController 
    def index 
    @type = param[:type] # type is passed from the route.rb 
    @posts = Post.where(_type: @type) 

    ... 

所以,如果被指定为@type“项目”,@posts将只包含“文章”类型的职位。这在文章视图中很好:只显示文章,但不显示其他类型的文章。

但是,在帖子视图中,它将显示帖子和文章。

我不希望文章显示在我的帖子视图中 - 实际上,我只想从视图中显示的基础模型文章中看到帖子。有没有一种方法可以从基础控制器中的继承模型中排除项目?

换句话说,我如何才能从基本模型中找到物品?

回答

0

我想通了,我可以用在控制器中执行以下:

@post = Post.where(_type: "Post") 

是它去的路吗?

+0

是的,否则它会返回一切。你可以尝试在Post中添加一个default_scope(_type:“Post”),看看它是否有帮助。 – Roman