В Rails, как мне вернуть связанную запись, используя includes ?

#ruby-on-rails #ruby #activerecord

#ruby-on-rails #ruby #activerecord

Вопрос:

Я знаю о методах includes и extract_associated .

extract_associated, используемый здесь, в документах Rails, возвращает только пользовательские записи —

 account.memberships.extract_associated(:user)
# => Returns collection of User records 
 

Я хочу вернуть записи о членстве С записями пользователей в том же массиве. Я знаю, что includes метод должен сделать это за меня, но мой ответ включает только user_id, а не фактическую запись, т. Е. Использование includes вообще не изменило то, что возвращается, вот так:-

 account.memberships.includes(:user)
# => Returns collection of Membership records, with user_ids 
[{ "id": 3, "account_id": 1, "user_id": 2, "membership_name": 'Annual Membership'}]
 

Мои членства принадлежат пользователю, а у пользователя есть членство во многих.

Чего мне здесь не хватает?

membership.user На мой взгляд, это не вариант для меня, потому что я использую VueJS, поэтому мне нужно передать все необходимые данные.

Комментарии:

1. Работа с объектами — лучший / ruby способ сделать это. Тем не менее, попробуйте использовать как «объединения», так и «включает» и посмотрите, даст ли это вам то, что вам нужно. Надеюсь, вы сможете получить то, что вам нужно, из этого как есть, но в противном случае вам также нужно будет указать «выбрать».

Ответ №1:

вы можете включить коллекцию ассоциации в виде json.

 account.memberships.includes(:user)
       .as_json(include: { memberships: { include: :user } })
 

Подробности об API см. В документации.
https://api.rubyonrails.org/classes/ActiveModel/Serializers/JSON.html