0

私はMongoidとRails3を使用しており、次の単一テーブル継承があります。

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

Postから継承されたモデル「Article」が1つあります。

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

私はSTIを試す初心者です。「1つのコントローラー」がベースモデルと継承モデルに適した設計であることを学びました。だから私はこのようなPostsControllerを持っています

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

    ...

したがって、@typeが「Article」として指定されている場合、@postsには「Article」タイプの投稿のみが含まれます。これは記事ビューでうまく機能します。記事のみが表示され、他の種類の投稿は表示されません。

ただし、投稿ビューでは、投稿と記事の両方が表示されます。

投稿ビューに記事を表示したくない-実際には、ビューに表示されるベースモデルの投稿のみが必要です。ベースコントローラーの継承モデルからアイテムを除外する方法はありますか?

つまり、ベースモデルからのみアイテムを見つけるにはどうすればよいですか?

4

1 に答える 1

0

コントローラで次を使用できることがわかりました。

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

それは正しい道ですか?

于 2012-10-11T17:16:18.587 に答える