Как отобразить информацию из таблицы соединений с помощью нового интерфейса запросов Rails 3 - PullRequest
0 голосов
/ 18 января 2012

У меня есть две модели Horse и Race.

class Horse < ActiveRecord::Base
has_many :races
end

class Race < ActiveRecord::Base
belongs_to :horse
end

Теперь я хочу использовать новый интерфейс запроса rails 3, чтобы увидеть имя Лошади и все ее расы.

Horse.joins(:races)  # I get an active record relation that only displays horse data

Horse.joins(:races).count #Yields 31 the exact number of races.

Horse.joins(:races).all #Yields an Array of 31 Horse, but no race data

Horse.joins(:races).all.select("horses.*, starters.*") #Yields active record relation with only Horse data.

Вопрос 1 : Какой правильный запрос дает полные записи о лошадях и расах.

Вопрос 2: Какой правильный запрос дает имя лошади и все рекорды гонки.

Я знаю, что это очень просто, но я в тупике. Я чувствую, что делаю что-то не так с отношением.

1 Ответ

1 голос
/ 18 января 2012

Из того, что я вижу, я не думаю, что вы делаете что-то не так с вашими отношениями.

Если вы хотите увидеть всех лошадей с каждой из их рас:

Horse.includes(:races).each do |horse|
  puts horse.name
  horse.races.each do |race|
    puts race.name
  end
end

Если я понимаю ваш вопрос, использование joins(:races) здесь не имеет значения.Во-первых, он не будет автоматически извлекать какие-либо данные из таблицы рас.Это просто добавит внутреннее соединение между лошадьми и расами.Если у лошади N 10 гонок, этот запрос вернет 10 экземпляров лошадей N. В этом случае, вероятно, это бесполезно.

Приведенный выше includes(:races) не является строго необходимым - он просто загружает все гонки.сразу с одним запросом, в отличие от n запросов ( n - количество лошадей).Просто экономит время и ресурсы.

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