Rails:as_json忽略参数

时间:2018-01-18 23:20:41

标签: ruby-on-rails json activerecord ruby-on-rails-5

我试图做一个"不简单"使用ActiveRecord进行查询:

ChatRoom.first.as_json(include: {
    chat_room_members: {
         include:{
             user: {                    
                 include: [
                     hero_page: {
                         only: [:torch_id]
                     }, 
                     card: {
                         only: [:crop_y]
                     }
                 ]
             }
         }}}) 

在模型中,ChatRoom有许多ChatRoomMembers,其中UserHeroPageCard

问题是ActiveRecord完全忽略了参数card。更具体地说,忽略user: include{}中的第一个参数之后的所有参数:

{  
   "id"   =>22,
   "chat_room_members"   =>   [  
      {  
         "id"         =>7,
         "user"         =>         {  
            "id"            =>22,
            "hero_page"            =>            {  
               "torch_id"               =>"superhero23"
            },
         }
      }
   ]
}

但是,如果我从onlyhero_page中移除card参数,ActiveRecord会显示一切正常。例如:

[...]
    include: [
        hero_page: {
            only: [:torch_id]
        }, 
        :card
    ]
[...]

其他奇怪的事实是我可以在第二个参数中键入任何内容(尊重语法)并且不会导致错误。例如:

[...]
    include: [
        hero_page: {
            only: [:torch_id]
        }, 
        this: {
            only: [:doesnt, :cause, :error]
        }
    ]
[...]

与第一个示例一样,仅显示hero_page并忽略其他参数this,它甚至不存在。

有人知道为什么在这些情况下会忽略第二个参数吗?

1 个答案:

答案 0 :(得分:1)

user.include需要哈希而不是当前的数组。