4

我正在使用三个基本模型:

class User < ActiveRecord::Base
  has_many :assignments
end

class Assignment < ActiveRecord::Base
  belongs_to :group
  belongs_to :user  
end

class Group < ActiveRecord::Base
  has_many :assignments
end

使用这个模式,我会假设“分配”模型是一种连接表,它包含哪些用户属于哪些组的信息。所以,我想要做的是,使用一个用户对象,找出他们属于哪些组。

在 Rail 控制台中,我正在执行以下操作:

me = User.find(1)

它应该返回用户对象。然后,我尝试查看该用户属于哪些“组”,我认为它会通过“分配”模型。但是,我显然做错了什么:

me.groups

返回:

NoMethodError: undefined method `groups' for #<User:0x007fd5d6320c68>

我将如何找出“我”对象属于哪些“组”?

非常感谢!

4

4 回答 4

6

您必须在每个模型中声明用户 - 组关系:

class User < ActiveRecord::Base
  has_many :assignments
  has_many :groups, through: :assignments
end

class Group < ActiveRecord::Base
  has_many :assignments
  has_many :users, through: :assignments
end

另外,我建议您在 Assignment 模型上设置一些验证,以确保 Assignment 始终引用 Group AND a User

class Assignment < ActiveRecord::Base
  belongs_to :group
  belongs_to :user  
  validates :user_id, presence: true
  validates :group_id, presence: true
end
于 2013-08-05T14:55:16.523 回答
2
class User < ActiveRecord::Base
  has_many :assignments
  has_many :groups, through: :assignments
end

class Assignment < ActiveRecord::Base
  belongs_to :group
  belongs_to :user  
end

class Group < ActiveRecord::Base
  has_many :assignments
  has_many :users, through: :assignments
end

请参考协会基础

于 2013-08-05T14:56:20.940 回答
1

me的类型是Usernot Assignment。你想做:

me.assignments.first.groups

这将为您提供属于用户第一个分配的所有组。要获得所有你可以做的组,正如 Yoshiji 先生在下面评论的那样:

me.assignments.map(&:groups)
于 2013-08-05T14:55:12.983 回答
0

您没有在组上定义 has_many 。尝试

me.assignments.first.group 

应该管用。

于 2013-08-05T14:55:23.530 回答