Я использую пример с направляющими 3, но я полагаю, что это верно для направляющих 2.3 также.
Предположим, у меня есть образцовый Город, который имеет много Местоположений. Я пытаюсь найти Города, которые имеют местоположения.
Я использую следующий код:
City.joins(:locations)
Но выходной массив:
=> [#<City id: 5, name: "moscow", created_at: "2010-07-02 15:09:16", updated_at: "2010-07-02 15:09:16">, #<City id: 5, name: "moscow", created_at: "2010-07-02 15:09:16", updated_at: "2010-07-02 15:09:16">, #<City id: 5, name: "moscow", created_at: "2010-07-02 15:09:16", updated_at: "2010-07-02 15:09:16">, #<City id: 5, name: "moscow", created_at: "2010-07-02 15:09:16", updated_at: "2010-07-02 15:09:16">]
Длина массива равняется 4 (количество районов Москвы).
В каком случае это может быть полезно? Поскольку, какие цели 4 копии каждый - объект в выходном массиве?
Я могу использовать City.joins (: местоположения) .uniq, но я проиграл гибкий из ареала.
У меня есть два вопроса:
Соединение по существу говорит о том, что нужно объединить две таблицы и рассматривать их как одну таблицу, отправляя обратно все, что будет найдено.Это означает, что он найдет вам каждую комбинацию города и местоположения (Rails помогает, сопоставляя вещи на основе отношения own_to / has_many в ваших моделях).
Выполнение City.joins (: locations)
предназначено для поиска всех местоположений в городе. Другой способ ( Location.joins (: city)
) поможет определить, в каком городе находится локация.
Теперь,чтобы просто найти список городов, в которых есть некоторые местоположения, вы можете попробовать City.select (: city) .joins (: locations) .group ('cities.id')
select () Предложение
предписывает ему просто вернуть город, а предложение group () предписывает ему не возвращать повторяющиеся копии.