Rails - основной класс, подкласс, как получить все записи с подклассом - PullRequest
1 голос
/ 11 декабря 2010

При использовании 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") Я получаю доступ к URL http://localhost:3000/blog

Вот мои маршруты

    resources :pages do
        collection do
            get :gallery
            get :list
        end     
    end
    resources :blog, :controller => :pages

1 Ответ

1 голос
/ 11 декабря 2010

Вам необходимо определить класс для каждого типа в каталоге 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 , чтобы высушить контроллеры.

...