我正在使用三种基本模型:
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)
返回用户对象,应该如此。然后,我试图看看这个用户属于哪个“组”,我认为它将通过“Assignment”模型。但是,我显然做错了什么:
me.groups
返回:
NoMethodError: undefined method `groups' for #<User:0x007fd5d6320c68>
我如何找出“我”对象所属的“群组”?
非常感谢!
答案 0 :(得分: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
另外,我建议您在分配模型上设置一些验证,以确保分配始终引用群组和用户:
class Assignment < ActiveRecord::Base
belongs_to :group
belongs_to :user
validates :user_id, presence: true
validates :group_id, presence: true
end
答案 1 :(得分: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
答案 2 :(得分:1)
me
的{{1}}类型不是User
。你想做的事:
Assignment
这将为您提供属于该用户第一次分配的所有组。为了得到你可以做的所有小组,正如MrYoshiji先生在下面评论过的那样:
me.assignments.first.groups
答案 3 :(得分:0)
您没有在群组中定义has_many。试试
me.assignments.first.group
应该有用。