has_and_belongs_to_many_relationship, но только для пользователей без прав администратора - PullRequest
1 голос
/ 12 января 2012

У меня есть модель пользователей и модель компаний. Много пользователей для многих компаний. Это прекрасно работает для обычных пользователей. Это не так здорово для пользователей с правами администратора. Админы должны видеть все компании. Я бы предпочел не назначать всех компаний администраторам.

В настоящее время я использую методы внутри своей модели, например:

class Company
  def self.for_user
    if User.current.is_admin?
       Company.all
    else
       User.companies
    end
  end
end

Есть ли способ связать отношение has_and_belongs_to_many с условием?

Ответы [ 2 ]

0 голосов
/ 12 января 2012

благодаря этому вопросу / ответу я разобрался

Изменить поведение has_many или использовать область действия?

Итак, моя ассоциация становится

class User
  has_and_belongs_to_many :companies do
    def visible
      if proxy_owner.can? "company:view_all"
        Company.scoped
      else
        self
      end
    end
  end
end

Тогда вы можете позвонить с

User.find(x).companies.visible
0 голосов
/ 12 января 2012

Я не думаю, что вы можете определить отношения условно, передав любую опцию методу has_and_belongs_to_many.

Я большой фанат STI, поэтому я, вероятно, сделал бы что-то вроде этого:1003 *

class User < ActiveRecord::Base
  has_and_belongs_to_many :companies
end

class Admin < User
  def companies
    Companies.all
  end
end
...