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