Как получить область для всех строк базы данных в рельсах 3? - PullRequest
3 голосов
/ 07 сентября 2011

предположим, что мы настроены следующим образом:

class Post < ActiveRecord::Base
  belongs_to :user
end

class User < ActiveRecord::Base
  has_many :posts
end

предположим, что у пользователя есть логический атрибут 'admin', который указывает, является ли он глобальным администратором или нет.

Я хочунаписать метод (или область действия?) для класса User, который называется 'visible_posts'.Если пользователь не является администратором, он должен возвращать только свои собственные сообщения.Если он является администратором, метод должен вернуть все сообщения в системе.

Моя первая попытка была примерно такой:

class User < ActiveRecord::Base

  [...]

  def visible_posts
    if admin?
      Post.all
    else 
      posts
    end
  end

end

Проблема здесь в том, что Post.all возвращает массив, но яскорее хотел бы иметь ActiveRecord :: Relation, как я получаю из постов, чтобы работать с ним позже.

Возможно ли как-нибудь получить ActiveRecord :: Relation, который представляет ВСЕ посты?

1 Ответ

8 голосов
/ 07 сентября 2011

Вы можете сделать Post.scoped я думаю, в Rails

И позже вы можете позвонить .all, чтобы получить результаты

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...