Skip to content
Snippets Groups Projects
Commit 42ef4473 authored by Eliot Sykes's avatar Eliot Sykes
Browse files

Add preload+joins alternative option for overcoming the known issue with includes

In face of this known issue, .joins(...).preload(...) felt like a slightly better option (vs. :select option passed to .near()) for just the particular use case I'm up against where includes would have been useful. 

Thought it'd be worth adding to the docs, especially as preload() isn't widely demonstrated in Rails own docs.
parent ab19ff71
No related branches found
No related tags found
No related merge requests found
......@@ -740,10 +740,17 @@ When reporting an issue, please list the version of Geocoder you are using and a
Known Issue
-----------
You cannot use the `near` scope with another scope that provides an `includes` option because the `SELECT` clause generated by `near` will overwrite it (or vice versa). Instead, try using `joins` and pass a `:select` option to the `near` scope to get the columns you want. For example:
You cannot use the `near` scope with another scope that provides an `includes` option because the `SELECT` clause generated by `near` will overwrite it (or vice versa).
# instead of City.near(...).includes(:venues)
Instead of using `includes` to reduce the number of database queries, try using `joins` with either the `:select` option or a call to `preload`. Both choices are demonstrated below:
# Pass a :select option to the near scope to get the columns you want.
# Instead of City.near(...).includes(:venues), try:
City.near("Omaha, NE", 20, :select => "cities.*, venues.*").joins(:venues)
# This preload call will normally trigger 2 queries regardless of the number of results; one query
# on hotels, and one query on administrators. Instead of Hotel.near(...).includes(:administrator), try:
Hotel.near("London, UK", 50).joins(:administrator).preload(:administrator)
If anyone has a more elegant solution to this problem I am very interested in seeing it.
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment