我有两个表用户(id,name ...)和user_group_users(user_id,usergroup_id)
我尝试在两个表上进行连接,在结果中需要这样的东西
user.id user.name user_group_users.user_id,user_group_users.user_group_id
试过这个:
@users = current_client.users.joins('LEFT INNER JOIN user_group_users ON user_group_users.user_id = users.id')
但是在结果中缺少user_group_users.user_id,user_group_users.user_group_id
我该如何解决?
型号:
class UserGroupUser < ActiveRecord::Base
belongs_to :user_group
belongs_to :user
end
class UserGroup < ActiveRecord::Base
has_many :user_group_users
has_many :users, :through => :user_group_users
end
class User < ActiveRecord::Base
has_many :user_groups
has_many :user_group_users, :through => :user_group_users
end
如果用户已经在此组中,我需要usergroupusers的user_id和usergroup_id来设置切换器。
答案 0 :(得分:2)
你试图做太多而不让Rails完成它打算为你做的工作。您应该仔细阅读Rails中的documentation,因为您需要的所有信息都在那里,您可以使用Google在线找到几个示例。
在你的情况下,你真的只需要一个“拥有并属于许多”的关系。如文档中所述,这类似于“有很多......通过”,但不要求您的代码知道中间模型(您称之为UserGroupUser
)。
class UserGroup < ActiveRecord::Base
has_and_belongs_to_many :users
end
class User < ActiveRecord::Base
has_and_belongs_to_many :user_groups
end
在您的代码中,假设您在UserGroup
中有一个@group
活动记录对象,并且您在@user
中有一个用户活动记录对象。然后,这将告诉您用户是否在该组中:
@group.users.map { |u| u.id }.include? @user.id
如果要检查每个用户,请使用User.all.each do |user| ...
循环。
您可以摆脱UserGroupUser
模型,但仍需要该表,如文档中所述。