-
-
Notifications
You must be signed in to change notification settings - Fork 827
Closed
Description
I use Ransack like this:
Contact.ransack(organization_commune_id_or_person_school_commune_id_eq_any: [id_of_school])In the gem version from January the generated query looks like this (and works):
SELECT
"contacts"."contact_type", "contacts"."deleted_at", "contacts"."id", "contacts"."name", "contacts"."organization_id", "contacts"."person_id", "contacts"."state", "contacts"."student_council_id", "contacts"."updated_at"
FROM
"contacts"
LEFT OUTER JOIN "organizations" ON
"organizations"."id" = "contacts"."organization_id"
LEFT OUTER JOIN "people" ON
"people"."id" = "contacts"."person_id"
LEFT OUTER JOIN "organizations" "organizations_contacts" ON
"organizations_contacts"."id" = "contacts"."organization_id"
LEFT OUTER JOIN "contacts" "contacts_organizations_join" ON
"contacts_organizations_join"."organization_id" = "organizations"."id"
LEFT OUTER JOIN "contact_relationships" ON
"contact_relationships"."relationship_type" = $1 AND
"contact_relationships"."child_id" = "contacts_organizations_join"."id"
LEFT OUTER JOIN "contacts" "commune_contacts_organizations_join" ON
"commune_contacts_organizations_join"."id" = "contact_relationships"."parent_id"
LEFT OUTER JOIN "organizations" "communes_organizations" ON
"communes_organizations"."id" = "commune_contacts_organizations_join"."organization_id"
LEFT OUTER JOIN "people" "people_contacts" ON
"people_contacts"."id" = "contacts"."person_id"
LEFT OUTER JOIN "organizations" "schools_people" ON
"schools_people"."id" = "people"."school_id"
LEFT OUTER JOIN "contacts" "contacts_organizations_join_2" ON
"contacts_organizations_join_2"."organization_id" = "schools_people"."id"
LEFT OUTER JOIN "contact_relationships" "commune_relationships_organizations_join" ON
"commune_relationships_organizations_join"."relationship_type" = $2 AND
"commune_relationships_organizations_join"."child_id" = "contacts_organizations_join_2"."id"
LEFT OUTER JOIN "contacts" "commune_contacts_organizations_join_2" ON
"commune_contacts_organizations_join_2"."id" = "commune_relationships_organizations_join"."parent_id"
LEFT OUTER JOIN "organizations" "communes_organizations_2" ON
"communes_organizations_2"."id" = "commune_contacts_organizations_join_2"."organization_id"
WHERE
(("communes_organizations"."id" = 1045) OR ("communes_organizations_2"."id" = 1045))
GROUP BY
"contacts"."id", contacts.contact_type, contacts.deleted_at, contacts.id, contacts.name, contacts.organization_id, contacts.person_id, contacts.state, contacts.student_council_id, contacts.updated_at
LIMIT $3
OFFSET $4
Notice the extra joins and how this line looks:
(("communes_organizations"."id" = 1045) OR ("communes_organizations_2"."id" = 1045))
Here is how it looks under the current master (and doesn't work):
SELECT
"contacts"."contact_type", "contacts"."deleted_at", "contacts"."id", "contacts"."name", "contacts"."organization_id", "contacts"."person_id", "contacts"."state", "contacts"."student_council_id", "contacts"."updated_at"
FROM
"contacts"
LEFT OUTER JOIN "organizations" ON
"organizations"."id" = "contacts"."organization_id"
LEFT OUTER JOIN "people" ON
"people"."id" = "contacts"."person_id"
LEFT OUTER JOIN "organizations" "organizations_contacts" ON
"organizations_contacts"."id" = "contacts"."organization_id"
LEFT OUTER JOIN "contacts" "contacts_organizations_join" ON
"contacts_organizations_join"."organization_id" = "organizations"."id"
LEFT OUTER JOIN "contact_relationships" ON
"contact_relationships"."relationship_type" = $1 AND
"contact_relationships"."child_id" = "contacts_organizations_join"."id"
LEFT OUTER JOIN "contacts" "commune_contacts_organizations_join" ON
"commune_contacts_organizations_join"."id" = "contact_relationships"."parent_id"
LEFT OUTER JOIN "organizations" "communes_organizations" ON
"communes_organizations"."id" = "commune_contacts_organizations_join"."organization_id"
LEFT OUTER JOIN "people" "people_contacts" ON
"people_contacts"."id" = "contacts"."person_id"
LEFT OUTER JOIN "organizations" "schools_people" ON
"schools_people"."id" = "people"."school_id"
WHERE
(("communes_organizations"."id" = 1029) OR ("communes_organizations"."id" = 1029))
GROUP BY
"contacts"."id", contacts.contact_type, contacts.deleted_at, contacts.id, contacts.name, contacts.organization_id, contacts.person_id, contacts.state, contacts.student_council_id, contacts.updated_at
LIMIT $2
OFFSET $3
Notice the missing extra joins and the same line which now uses the same relation instead of two different ones:
(("communes_organizations"."id" = 1029) OR ("communes_organizations"."id" = 1029))
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
No labels