代码之家  ›  专栏  ›  技术社区  ›  gwalshington

Rails JSON包含两个相同模型的实例

  •  2
  • gwalshington  · 技术社区  · 6 年前

    我有一个名为exchanges的模型,它存储创建它的用户的用户名。我可以打电话 @exchange.user 它又回来了 User.where(user_id: @exchange.user_id)

    还有一个关联来显示所有喜欢交换的用户,可以使用 @exchange.favorite_users

    我想在JSON响应中返回这两个值,但只返回第一个值。

    @exchanges = Exchange.includes(:tags, :favorite_users, :user).where(approved: true)

     respond_to do |format|
       format.json { render json: {data: {exchanges: @exchanges.to_json(include: [:tags, user: {:only => [:id,:slug], :methods => [:avatar_url]}, favorite_users: { only: [:id]}] ), tags: @tags.to_json }}}
     end
    

    此版本返回 user: {:only => [:id,:slug], :methods => [:avatar_url]} ,但不是 favorite_users: { only: [:id]} .

    format.json { render json: {data: {exchanges: @exchanges.to_json(include: [:tags, favorite_users: { only: [:id]}, user: {:only => [:id,:slug], :methods => [:avatar_url]}] ), tags: @tags.to_json }}}
    

    这只回来了 最喜爱的用户:仅:[:id] ,但不是 用户::仅=>[:id,:slug],:方法=>[:avatar_url]

    我怎么把它们都还回来?

    交换模型

    class Exchange < ApplicationRecord
      belongs_to :language
      belongs_to :user
      has_many :exchanges_users
      has_many :favorite_users, :through => :exchanges_users, source: :user
      has_many :tags_exchanges
      has_many :tags, :through => :tags_exchanges
    end
    
    1 回复  |  直到 6 年前
        1
  •  1
  •   ogelacinyc    6 年前
    @exchanges.to_json(include: [
        :tags, 
        {user: {only: [:id,:slug], methods: [:avatar_url]}}, 
        {favorite_users: { only: [:id]}}
    ])
    

    如果要返回两个关联模型,请使用包装关联

    制动器只能使用关联符号,但不能使用选项