在我的数据库中,用户和角色之间有多对多的关系(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