From cec6ea482a819ef2f5eb36e3467b59c196c1b515 Mon Sep 17 00:00:00 2001 From: Sean <11340230+scarroll32@users.noreply.github.com> Date: Mon, 11 Apr 2022 19:57:58 +0200 Subject: [PATCH] Create polymorphic-search.md --- docs/docs/going-further/polymorphic-search.md | 40 +++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100644 docs/docs/going-further/polymorphic-search.md diff --git a/docs/docs/going-further/polymorphic-search.md b/docs/docs/going-further/polymorphic-search.md new file mode 100644 index 0000000..cadaa70 --- /dev/null +++ b/docs/docs/going-further/polymorphic-search.md @@ -0,0 +1,40 @@ +--- +title: Polymorphic Searches +sidebar_position: 14 +--- + +When making searches from polymorphic models it is necessary to specify the type of model you are searching. + +For example: + +Given two models + +```ruby +class House < ActiveRecord::Base + has_one :location, as: :locatable +end + +class Location < ActiveRecord::Base + belongs_to :locatable, polymorphic: true +end +``` + +Normally (without polymorphic relationship) you would be able to search as per below: + +```ruby +Location.ransack(locatable_number_eq: 100).result +``` + +However when this is searched you will get the following error + +```ruby +ActiveRecord::EagerLoadPolymorphicError: Can not eagerly load the polymorphic association :locatable +``` + +In order to search for locations by house number when the relationship is polymorphic you have to specify the type of records you will be searching and construct your search as below: + +```ruby +Location.ransack(locatable_of_House_type_number_eq: 100).result +``` + +note the `_of_House_type_` added to the search key. This allows Ransack to correctly specify the table names in SQL join queries.