Создать объединенный список объектов в одной таблице, используя ActiveRecord - PullRequest
0 голосов
/ 19 ноября 2018

Мое приложение имеет группы и отношения между пользователями.Отношения являются взаимными, поэтому в каждой группе 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.

Что мне делать?

1 Ответ

0 голосов
/ 19 ноября 2018

Следующие должны сделать:

Relationship.all(:select => "relationships.group_name, relationships.user_id, relationships.label, b.name",
         :joins     => "JOIN relationships AS b 
                              ON relationships.user_id = b.receiver_id",
         :conditions => ["relationships.user_id = 'A']
)

Дайте мне знать, если это поможет!

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