2016-03-11 2 views
0

У меня есть эти модели:Rails 4 - Как добавить «включает» модели в запрос с «joins»?

class Car < ActiveRecord::Base 
    has_many :shared_cars 
end 
class SharedCar < ActiveRecord::Base 
    belongs_to :car 
    belongs_to :owner 
    acts_as_mappable :through => :car 
end 
class Owner < ActiveRecord::Base 
    has_many :shared_cars 
end 
car Service < ActiveRecord::Base 
    has_many :car_services 
    has_many :cars, through: :car_services 
end 

А вот запрос я имею:

@cars = SharedCar.joins(:car) 
       .select('COUNT(cars.id) AS grouped_cars, 
          cars.registration, 
          cars.added_at') 
        .within(distance, origin: [lat,lng]) 

Но на этот запрос, я должен был бы добавить еще services. Я попытался

@cars = SharedCar.joins(:car).includes(:services) 
       .select('COUNT(cars.id) AS grouped_cars, 
          cars.registration, 
          cars.added_at') 
        .within(distance, origin: [lat,lng]) 

Ошибка:

Association named 'services' was not found; perhaps you misspelled it? 

Как правильно прикрепил модели услуг в запросе?

+0

Можете ли вы добавить CarService модель, а? – hade

+0

Привет @hade, 'CarService' только' принадлежит_to: car' и 'принадлежит_to: service'. – user984621

+0

У вас нет никакой связи между SharedCar и сервисом, поэтому сообщение об ошибке. – hade

ответ

0

Возможно, это поможет!

class Car < ActiveRecord::Base 
    has_many :shared_cars 
    has_many :car_services ##added 
    has_many :services, through: :car_services ##added 
end 

, а затем в запросе

@cars = SharedCar.joins(car: :services) 
        .select('COUNT(cars.id) AS grouped_cars, 
           cars.registration, 
           cars.added_at') 
         .within(distance, origin: [lat,lng]) 
+0

Спасибо, @LHH. Я тестирую его, но запрос не возвращает поля в команде 'select'. – user984621

0
# car.rb 
class Car < ActiveRecord::Base 
    has_many :shared_cars 
    has_many :car_services 
end 

# And query with include 
@cars = SharedCar.joins(:car).includes(car: {car_services: :service}).select(
    'COUNT(cars.id) AS grouped_cars, 
    cars.registration, 
    cars.added_at' 
).within(distance, origin: [lat,lng]).references(:service) 
+0

Благодарим вас за ответ, @hade. Я тестирую запрос, но проблема в том, что он возвращает только идентификаторы, а не столбцы автомобилей (например, 'grouped_cars',' cars.registration' и т. Д.). – user984621