Рельсы JSON включают в себя 2 экземпляра той же модели - PullRequest
0 голосов
/ 02 января 2019

У меня есть модель под названием Exchanges, в которой хранится user_id пользователя, который ее создал.Я могу позвонить @exchange.user, и он вернет User.where(user_id: @exchange.user_id)

Также существует ассоциация, чтобы показать всем пользователям, которые выбрали Exchange, который можно вызвать с помощью @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 }}}

Этот возвращает только favorite_users: { only: [:id]}, но не user: {:only => [:id,:slug], :methods => [: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 Ответ

0 голосов
/ 08 января 2019
@exchanges.to_json(include: [
    :tags, 
    {user: {only: [:id,:slug], methods: [:avatar_url]}}, 
    {favorite_users: { only: [:id]}}
])

Если вы хотите вернуть обе ассоциированные модели, оберните ассоциацию с помощью {}

В корзинах используется только символ ассоциации, но опции не могут

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...