Ruby on rails Rails丰富关联-未定义的方法错误

Ruby on rails Rails丰富关联-未定义的方法错误,ruby-on-rails,model-associations,Ruby On Rails,Model 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 它返回用户对象,正如它应该返回的那样。然后

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

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
它返回用户对象,正如它应该返回的那样。然后,我尝试查看该用户属于哪些“组”,我认为这将通过“分配”模型进行。但是,我显然做错了什么:

me.groups
返回:

NoMethodError: undefined method `groups' for #<User:0x007fd5d6320c68>
NoMethodError:未定义的方法“组”#
我该如何找出“我”对象属于哪些“组”


非常感谢

您的
me
属于
User
类型,而不是
Assignment
。您要执行以下操作:

me.assignments.first.groups
这将为您提供属于用户第一次分配的所有组。要获取所有组,您可以按照Yoshiji先生的以下评论进行操作:

me.assignments.map(&:groups)

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

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用户

另外,我建议您在分配模型上设置一些验证,以确保分配始终指向一个组和一个用户

class Assignment < ActiveRecord::Base
  belongs_to :group
  belongs_to :user  
  validates :user_id, presence: true
  validates :group_id, presence: true
end
类分配
您没有定义组上的多个。试一试

me.assignments.first.group 
应该可以工作。

类用户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.assignments.map(&:groups)
获取
me
User@MrYoshiji,谢谢你的评论。我会用这个更新我的答案。我最初的意图是指出,
需要通过
作业
访问,而不是
用户
。谢谢,这就是我要找的。在验证方面也做得很好。为了简洁起见,我把这些从我的原始问题中删去了。
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