Rails join,结果需要两个表

时间:2015-07-22 14:26:59

标签: ruby-on-rails ruby ruby-on-rails-4

我有两个表用户(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

我想与所有用户一起生成此列表: enter image description here

如果用户已经在此组中,我需要usergroupusers的user_id和usergroup_id来设置切换器。

1 个答案:

答案 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模型,但仍需要该表,如文档中所述。