Мое приложение имеет группы и отношения между пользователями.Отношения являются взаимными, поэтому в каждой группе G пользователь A будет иметь метку для пользователя B и наоборот.
Вот код для модели отношений:
class Relationship < ApplicationRecord
belongs_to :group
belongs_to :user
belongs_to :receiver, class_name: "User", optional: true
В программе Show Userview (он же страница профиля пользователя), я хотел бы создать таблицу, в которой перечислены все отношения, которые будут выглядеть так.
| Group | User | Label for | Label from |
|-------|------|-----------|------------|
| Clowns| B | "Bozo" | "Ninny" |
| Dogs | C | "Rex" | |
| Tools | B | "Hammer" | "Wrench" |
Итак, с некоторой помощью из ответа @Rohit Patel,Я перешел к следующему синтаксису:
Relationship.select(:id, :group_id, :user_id, :receiver_id, :label, :'b.label as label_received').joins("left join relationships as b on relationships.receiver_id = b.user_id and relationships.group_id = b.group_id").where("relationships.user_id = 1")
Он получает нужные мне строки, но не дополнительные поля от объектов в b
и groups
.
.SQL для представления этого будет:
SELECT a.group_name, a.user_id, a.label, b.name
FROM relationships AS a
LEFT JOIN
relationships AS b
ON a.user_id = b.receiver_id
WHERE a.user_id = "A"
Я не могу понять, как это сделать с ActiveRecord.
Что мне делать?