У меня есть класс, который выглядит примерно так:
class User < ActiveRecord:Base
has_many :users_companies
has_many :companies, :through => :users_companies
end
Для простых пользователей я бы хотел, чтобы user.companies
ссылался на стандартный метод связи, но когда пользователь является администратором, я хочу User.all
(т.е. администраторы имеют доступ ко всем компаниям). Самый простой способ реализовать это (и то, что я всегда делал в прошлом) - это использовать область действия в классе Company, например:
scope :accessible_by, lambda { |user| ... }
Единственная проблема в том, что это просто не правильно. Вместо написания действия контроллера, которое включает в себя:
@companies = Company.accessible_by(current_user)
Мне было бы удобнее писать
@companies = current_user.companies
Есть ли хороший способ переопределить метод User # companies для учета такого рода поведения? Или я должен быть счастлив с использованием области на Компании?