Ruby on rails 为什么Rails`includes`方法不将包含的模型添加到属性中?
我遇到了一个与Ruby on rails 为什么Rails`includes`方法不将包含的模型添加到属性中?,ruby-on-rails,Ruby On Rails,我遇到了一个与includes方法相关的嵌套rails模型的奇怪问题。我试图简单地将项目从一个对象移动到其父对象,如下所示: 当前: [ { "created_on": "2014-09-11T15:52:34-04:00", "id": 8, "mail_notification": false, "project_id": 2, "user_id": 15, "member_roles":
includes
方法相关的嵌套rails模型的奇怪问题。我试图简单地将项目从一个对象移动到其父对象,如下所示:
当前:
[
{
"created_on": "2014-09-11T15:52:34-04:00",
"id": 8,
"mail_notification": false,
"project_id": 2,
"user_id": 15,
"member_roles": [
{
"id": 10,
"inherited_from": null,
"member_id": 8,
"role_id": 3
}
]
}
]
[
{
"created_on": "2014-09-11T15:52:34-04:00",
"id": 8,
"mail_notification": false,
"project_id": 2,
"user_id": 15,
"role_id": 3
}
]
需要:
[
{
"created_on": "2014-09-11T15:52:34-04:00",
"id": 8,
"mail_notification": false,
"project_id": 2,
"user_id": 15,
"member_roles": [
{
"id": 10,
"inherited_from": null,
"member_id": 8,
"role_id": 3
}
]
}
]
[
{
"created_on": "2014-09-11T15:52:34-04:00",
"id": 8,
"mail_notification": false,
"project_id": 2,
"user_id": 15,
"role_id": 3
}
]
出于某种原因,当我循环当前对象时,它会去掉:member\u角色
。例如:
members = Member.includes(:member_roles).find_all_by_project_id(@project)
# Contains :member_roles
puts members.to_json(include: [:member_roles])
#=> [{"created_on":"2014-09-11T15:52:34-04:00","id":8,"mail_notification":false,"project_id":2,"user_id":15,"member_roles":[{"id":10,"inherited_from":null,"member_id":8,"role_id":3}]}]
# Does not contain :member_roles
puts members.first.attributes
#=> {"id"=>8, "user_id"=>15, "project_id"=>2, "created_on"=>Thu, 11 Sep 2014 15:52:34 EDT -04:00, "mail_notification"=>false}
为什么
:成员角色对象消失了?你不能做你想做的事
Member.includes(:Member\u roles)急于加载您的关系(即,当您第一次实际在此对象上使用时,它获取成员集合所需的所有Member\u roles实例)
to_json(include:[:member_roles])在父成员模型json中包含相关模型的json表示
您所描述的称为方法委派(),但由于您的两个模型之间存在一对多关系,因此无法执行该操作,因为成员角色
不是成员属性的一部分。这是一个协会。