ActiveRecord包含结果不包含相关表的数据

时间:2018-12-29 22:25:34

标签: sql ruby postgresql activerecord ruby-on-rails-5

为什么当我显示@portfolio_items的jason时,我仅获得Portfolio的数据,而不是技术的数据,但是当我执行@ portfolio_items.technologies时,我仅获得技术的记录 我想要一个包含两者的杰森对象

    @portfolio_items = Portfolio.includes(:technologies).find(27)

    puts  json: @portfolio_items

返回

    Portfolio id: 27,
    title: "Portfolio title: 0",
    subtitle: "Angular", 
    body: "Lorem ipsum dolor sit amet, consectetur adipiscing...", 
    main_image: "https://via.placeholder.com/600x400", 
    thumb_image: "https://via.placeholder.com/350x200", 
    created_at:"2018-12-28 23:18:35", 
    updated_at: "2018-12-28 23:18:35"

 puts  json: @portfolio_items.technologies

返回

   [#<Technology id: 7, name: "Technology 0", portfolio_id: 27, created_at: 
   "2018-12-28 23:18:35", updated_at: "2018-12-28 23:18:35">,

   <Technology id: 8, name: "Technology 1", portfolio_id: 27, created_at
 :"2018-12-28 23:18:35", updated_at: "2018-12-28 23:18:35">,

  <Technology id: 9, name: "Technology 2", portfolio_id: 27, created_at: 
   "2018- 
   12-28 23:18:35", updated_at: "2018-12-28 23:18:35">]

所以基本上,为什么@portfolio_items在Portfolio_items.technologies中没有值

1 个答案:

答案 0 :(得分:1)

这是因为.technologies是在@portfolio_items对象上调用的一种方法,该方法将返回与之相关的技术,但是它不会将它们混合在一起,我认为这正是您所要的。要将其显示为嵌套的JSON对象,您需要这样的内容。

puts @portfolio_items.as_json(include:{technologies:{}})

如果您对此感到好奇,这可能会有所帮助:https://apidock.com/rails/ActiveModel/Serializers/JSON/as_json