В моей БД У меня есть отношение «многие ко многим» (HABTM) между Пользователями и Ролями. Я пытаюсь получить все имена ролей для пользователей, связанных с конкретным секретарем.Преобразование инструкции отображения Ruby в запрос ActiveRecord?
мне удалось булыжник следующие вместе:
class Secretary < ActiveRecord::Base
def getRoles
rolenames = Set.new
Role.all.map { |role| role.users.map { |user| rolenames << role.name if user.manager.secretary == self } }
rolenames.to_a
end
end
... который работает, но это, кажется, как правильно умыслом «где» заявление должно производить тот же результат, не попав в базу данных так много.
Возможно ли преобразовать вышеуказанное в более «родной» запрос ActiveRecord?
Как упоминалось в вопросе, отношения между пользователями и ролями являются отношением HABTM (has_and_belongs_to_many, с таблицей соединений). У менеджеров много пользователей системы, и у секретарей есть много менеджеров. Таким образом, запрос должен возвращать набор ролей для всех пользователей под определенным менеджером под определенным секретарем. Означает ли это вопрос? – user456584
Это должно работать тогда. Ты это пробовал? – seph
Внутренний запрос работает, но внешний запрос 'Role.where (: user_id => ...) не возвращает ничего. Я также попробовал 'Role.include (: users) .where (: user_id => ...)' с похожими результатами. – user456584