Rails Rich Associations-未定义的方法错误



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

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

使用这个模式,我假设"Assignment"模型是一种联接表,它包含哪些用户属于哪些组的信息。所以,我想做的是,使用一个User对象,找出它们属于哪个组

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

me = User.find(1)

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

me.groups

哪个返回:

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

我该如何找出"我"对象属于哪些"组"?

非常感谢!

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

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始终指向组和用户

class Assignment < ActiveRecord::Base
  belongs_to :group
  belongs_to :user  
  validates :user_id, presence: true
  validates :group_id, presence: true
end
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

请参阅关联基础

您的me的类型是User,而不是Assignment。你想做的事:

me.assignments.first.groups

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

me.assignments.map(&:groups)

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

me.assignments.first.group 

应该起作用。

最新更新