2016-02-01 65 views
0

我有两个表用户和组。从关联中获取数据

user  group 
----- ------- 
id  id 
name  group_name 
      created_by 

在我的用户模型我都用过,has_and_belongs_to_many :groups, dependent: :destroy

在我的组模型我都用过,has_and_belongs_to_many :users, dependent: :destroy

我在我的组控制器创建迁移

class UserGameGroup < ActiveRecord::Migration 
    def change 
    create_table :user_game_group, id: false do |t| 
     t.belongs_to :user, index: true 
     t.belongs_to :group, index: true 
    end 
    end 
end 

所以的show方法,我想为特定组获取用户。 假设我目前在第4组,我想根据该组获取所有用户。

我可以这样做Group.where(group_id: 4)但它只会给我用户的id。有没有办法获得用户的名字呢?

回答

2

想,如果我目前在第4组,我想根据该组

@group = Group.find 4 
@group.users.each do |user| #-> collection of User objects for @group 
    user.name 
end 
所有使用者去取

您的连接表名是错误的。

has_and_belongs_to_many,它应该是[alphabetical_first_plural]_[alphabetical_second_plural],你的情况groups_users

class UserGameGroup < ActiveRecord::Migration 
    def change 
    create_table :groups_users, id: false do |t| 
     t.belongs_to :user, index: true 
     t.belongs_to :group, index: true 
    end 
    end 
end 

如果你想使用你的表名,你就必须在模型中显式定义join_table选项:

#app/models/user.rb 
class User < ActiveRecord::Base 
    has_and_belongs_to_many :groups, join_table: :user_game_groups 
end 

#app/models/group.rb 
class Group < ActiveRecord::Base 
    has_and_belongs_to_many :users, join_table: :user_game_groups 
end 

要填充连接表,你可以使用<< & .delete methods

@user = User.find x 
@group = Group.find y 

@user.groups << @group 
@user.groups.delete @group 
+0

我user_game_groups表是空的,所以当我用你的代码我得到空数组,但是我有我的用户数据以及分组表。为什么我会得到空的答复?所以我检查了我的数据库,我不能添加任何东西到user_game_groups表 –

+0

我会添加更新 –

1

在您当前的示例中,您正在查询一个将使用方法users的组。同样,您可以使用此调用来检索用户记录的集合。

group = Group.where(group_id: 4) 
group.users # Returns a collection of users. 

如果你想使你可以使用ActiveRecord::QueryMethodsinclude方法,像这样一个查询。

Group.includes(:user).where(group_id: 4) 
1

您应该将您的加入组重命名为groups_users。 Rails期望加入组使用这种格式(连接表第一个字母表和第一个表以_分隔)。加上两者都应该是复数。此外,您的表名称组和用户都应该是复数形式,例如groupsusers,否则您必须在模型上手动指定表名称。

此外,为了取名字或者其他属性的用户,你可以像

group = Group.find(4)  
group_users = group.users 

group_users的东西会给你所有属于组ID的用户列表4