Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/52.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 为什么Rails`includes`方法不将包含的模型添加到属性中?_Ruby On Rails - Fatal编程技术网

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表示


您所描述的称为方法委派(),但由于您的两个模型之间存在一对多关系,因此无法执行该操作

,因为
成员角色
不是成员属性的一部分。这是一个协会。