Подтвердить что ты не робот

Записи запросов через отношение own_to в Rails

У меня есть модель Activities, и они принадлежат к Местоположение

Как выбрать все действия, в которых location.country = Australia? (например)

Могу ли я сделать это в пределах области?

4b9b3361

Ответ 1

Вид запроса, о котором вы говорите, - это соединение. Вы можете попробовать такие запросы в консоли, как:

Activity.joins(:locations).where('locations.country = "Australia"')

Это означает, что SQL будет принимать все действия и местоположения, связанные с ним, найти местоположения, в которых находится страна = Австралия, а затем вернуть вам действия, связанные с этими местоположениями.

Чтобы сделать это более пригодным для повторного использования, определите его в своей модели с переменной для страны:

scope :in_country, lambda {|country| joins(:locations).where('locations.country = ?',country)}

Подробнее об этом можно узнать в API-документах.

Ответ 2

С последними версиями рельсов вы можете:

Activity.joins(:location).where(locations: { country: "Australia" })

Осторожно:

  • местоположение является единственным в joins (: location), потому что оно принадлежит отношению к
  • местоположения во множественном числе, потому что это имя таблицы

Последнее означает, что если у вас было следующее:

belongs_to :location, class_name: "PublicLocation"

запрос будет выглядеть следующим образом:

 Activity.joins(:location).where(public_locations: { country: "Australia" })

Ответ 3

Да, можно использовать область. Что-то вроде этого должно работать над моделью Activities:

scope :down_under, 
    joins(:locations).
    includes(:locations).
    where("locations.country = 'Australia')