Rails - поиск нескольких связей - PullRequest
1 голос
/ 18 ноября 2011

Ради упрощения моей задачи, скажем, у нас есть три модели;user, flight и plane.Я хочу показать пользователю таблицу того, сколько раз они летали на каждом самолете.

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

flown_planes = {}

@user.flights.each do |f|
  if flown_planes[f.plane.id]
    flown_planes[f.plane.id] += 1
  else
    flown_planes[f.plane.id] = 1
  end
end

Могу ли я как-то использовать .find и .count для достижения этой цели?Я уверен, что есть более чистый способ, чем выше.Пожалуйста, смотрите отношения ниже.


Рейс

class Flight < ActiveRecord::Base
  belongs_to :user
  belongs_to :plane
end

Самолет

class Plane < ActiveRecord::Base
  has_many :flights
end

Пользователь

class User < ActiveRecord::Base
  has_many :flights
end

1 Ответ

1 голос
/ 18 ноября 2011

Используйте group_by для группировки рейсов пользователя по самолетам!

@user.flights.group_by(&:plane_id)

Это должно сделать это для вас, ...

// Для итерации ...

@user.flights.group_by(&:plane_id).each do |plane_id, flights|
     plane = Plane.find(plane_id) # gives you the plain object so you can fetch the plane name/identification,... whatever you need
     flights.count # gives you count of flights in the plane
     flights.each do |flight|
          # do anything if you want with each of the flights the user had...
     end
end
...