Существует customer
таблицы со столбцами id
, name
и email
, а также address
таблицы со столбцами id
, street
, code
, customer_id
.Регистрации нормированной таблицы с активной записью
В SQL Присоединяюсь как с помощью:
SELECT c.id, c.name, c.email, a.street, a.code FROM customer AS c, address AS a WHERE a.customer_id = c.id;
В Rails Я смоделировал:
class Address < ActiveRecord::Base
self.table_name = 'address'
end
class Customer < ActiveRecord::Base
self.table_name = 'customer'
has_one :address
end
В контроллере я попытался:
Customer.joins(:address)
=>SELECT customer.* FROM customer INNER JOIN address ON address.customer_id = customer.id
Customer.includes(:address)
=>SELECT customer.* FROM customer; SELECT address.* FROM address WHERE address.customer_id IN (1, 2)
Однако оба результата не возвращают ожидаемый результат.
Как получить те же результаты, что определены в первом SQL-запросе или как это сделать?
Спасибо! Знаете ли вы, что ActiveRecord использует ленивую загрузку, и из-за этого иногда может скрывать свойства? – bodokaiser
Добро пожаловать! Что вы подразумеваете под скрытыми свойствами? Я верю, что ленивая загрузка происходит с «нетерпеливой» загрузкой. –