我有三个正在使用的基本模型:
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
应该起作用。