@IvanN777

Можно ли сделать scope для асоциации( или как то с имулировать)?

class User < ActiveRecord::Base
has_and_belongs_to_many :roles,  -> { uniq }
has_and_belongs_to_many  :additional_roles, :class_name => 'Role'

Есть пользователи и у каждого есть поле role_id, есть отдельный класс Roles.
Хотелось написать scope чтобы выборка была только в том случае, если users.role_id и roles.id не совпадают. Что то на подобие user.additional_roles.roles
Была идея сделать отдельную связь has_and_belongs_to_many :additional_roles и задать условие через finder_sql, но немного не понял как взять текущее role_id у пользователя.
Никто не сталкивался?
  • Вопрос задан
  • 2262 просмотра
Решения вопроса 1
@vsuhachev
Скоп можно сделать для любого SQL, но есть разумное соглашение - скоп должен выдавать объекты того класса в котором он определен. Т.е. в вашем случае вам нужно определять скоп в классе Roles и в качестве параметра передавать в него пользователя, для которого вы хотите отфильтровать роли. Ну и учтите что скоп это метод класса а не объекта.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы