Рельсы, использующие соединения, получают повторный столбец - PullRequest
0 голосов
/ 27 февраля 2020

Моя ассоциация

class Website < ApplicationRecord
  has_many :settings
  has_one :shop
end

Установочные значения и значения таблиц магазинов:

2.6.1 :003 > Setting.all.pluck(:records)
=> [2, 2, 4, 0, 0, 0]

2.6.1 :003 > Shop.all.pluck(:records)
=> [4, 1, 1] 

Использование объединений

Website.joins(:settings, :shop).where("websites.id = ?", 2).pluck("settings.records", "shops.records")

Я получаю повторное значение

[[2, 4], [2, 1], [2, 1], [2, 4], [2, 1], [2, 1], [4, 4], [4, 1], [4, 1], [0, 4], [0, 1], [0, 1], [0, 4], [0, 1], [0, 1], [0, 4], [0, 1], [0, 1]]

Результат, который я хочу получить, например

[[2, 4], [2, 1], [4, 1], [0, 0], [0, 0], [0, 0]]

Как мне решить проблему?

Заранее спасибо:)

1 Ответ

0 голосов
/ 29 февраля 2020

Я не уверен, почему вы ожидаете, что результат будет [[2, 4], [2, 1], [4, 1], [0, 0], [0, 0], [0, 0]] (может быть, это опечатка?), Но если вы хотите получить неповторяющийся результат из запроса на соединение, вы можете использовать group + distinct:

Website.joins(:settings, :shop).where("websites.id = ?", 2).group("settings.records", "shops.records").distinct.pluck("settings.records", "shops.records")
=> [[0, 1], [0, 4], [2, 1], [2, 4], [4, 1], [4, 4]]
...