1

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
4

1 に答える 1

1

app/modelsディレクトリ内のすべてのタイプのクラスを定義する必要があります。

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

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

1つのコントローラーで両方を取得する場合:

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

したがって、本質的に、all-methodは、呼び出したクラスのインスタンスを返します。

ただし、タイプごとに個別のコントローラーを使用することをお勧めします。それらは異なるリソースであり、そのように踏む必要があります。AttachedResourcesなどのツールを使用して、コントローラーを枯渇させます。

于 2010-12-11T10:58:42.560 に答える