Hey everyone,
I’ve got two models: Admin and CallCenter. An Admin may belong to a CallCenter (the field is nullable). To keep history, Admins and CallCenters have a deleted field with, for both of them:
default_scope { where(deleted: false) }
``
Now, I want to implement Admin.all_detailed which will retrieve all non-deleted admins with their call center (LEFT JOIN). Simply doing a eager_load will make a join with the default_scope condition, thus, non-deleted admins which belong to a deleted call center will be shown not having one. The unscoped_associations gem didn’t solve this issue. Therefor, I did this:
def self.all_detailed return joins(“LEFT JOIN call_centers ON call_centers.id = admins.call_center”) end
``
But now, when accessing the call center method of each admin, it triggers a query:
SELECT call_centers
.* FROM call_centers
WHERE call_centers
.id
= @id LIMIT 1
``
I figured out the query doesn’t SELECT the call center’s fields:
SELECT admins
.* FROM admins
LEFT JOIN call_centers – …
``
So I added the SELECT fields:
def self.all_detailed return select(“admins., call_centers.”) .joins(“LEFT JOIN call_centers ON call_centers.id = admins.call_center”) end
``
But a query is still triggered for every access to the call_center method of Admin. It seems like Rails does not know how to link the SELECT with the Admin’s association, but I don’t see what else I can do.
Thanks for your help!