堆栈溢出有很多“has_many”rails问题,但没有什么是我需要的。我有三个模型:Users,OrganizationUsers和Organizations。它们看起来像这样:
class User < ActiveRecord::Base
has_many :organization_users #the model relating User and Organization
has_many :organizations, through: :organization_users
并且
class Organization < ActiveRecord::Base
has_many :organization_users
has_many :users, through: :organization_users
end
并且
class OrganizationUser < ActiveRecord::Base
belongs_to :user
belongs_to :organization
end
我想要做的很多挫折是,如果用户是管理员且管理员的组织与用户的组织匹配,则仅向当前用户显示用户。所以我将举例说明我尝试的那些无效的想法(来自users_controller.rb):
admin_users << User.where(current_user.organizations.all.include? :organization )
显然这不起作用,但我认为它显示了我想要做的事情。更复杂的是,我真的想使用paginate ,这显然不喜欢将strait up数组作为参数,所以我希望如果可能的话,纯粹使用过滤器。
提前致谢。
答案 0 :(得分:1)
您没有说出如何定义管理员,但假设用户模型上有一个简单的管理员布尔值,您可以查询当前用户组织中的所有管理员,如下所示:
User.includes(:organizations).where('organization_users.organization_id' => current_user.organization_ids, :admin => true)
答案 1 :(得分:0)
我会尝试:
OrganizationUser.where(user_id: current_user.id).joins(:user).where(user: {admin: true}).includes(:user).map(&:user)
OrganizationUser
匹配的当前用户,以获取其所有组织users
表,只选择管理员(我假设users
表中有一个布尔值,如果不同则更改)User
过滤前的<{li}的OrganizationUser
个对象
醇>