foliwe83
foliwe83

Reputation: 590

How to implemet search with ransack on a has_many :through association

This is what i have done so far

class Business < ApplicationRecord
    has_many :locations
    has_many :continent, through: :locations
    ...........

class Continent < ApplicationRecord
    has_many :locations
    has_many :businesses, through: :locations
    ..............

class Location < ApplicationRecord
  belongs_to :continent
  belongs_to :business
end

#search Form

<%= search_form_for @q do |f| %>
        <%= f.select :continent_id_eq, options_from_collection_for_select(Continent.all.order(:name), :id, :name, @q.continent_id_eq), { }, {class: ''} %>
        <%= f.search_field :name_cont %>

I have created records and given appropriate association.s In the form, when i select a continent from the list to query the businesses , it does not query. No errors are displayed

This this what i get from the search params

localhost:3000/businesses?q[continent_id_eq]=1&q[name_cont]=&commit=Search

This is the console log

Business Load (1.6ms)  SELECT DISTINCT "businesses".* FROM "businesses" LEFT OUTER JOIN "locations" ON "locations"."business_id" = "businesses"."id" LEFT OUTER JOIN "continents" ON "continents"."id" = "locations"."continent_id" WHERE "continents"."id" = 3

What am i doing wrong

Upvotes: 3

Views: 1878

Answers (1)

cm1745
cm1745

Reputation: 140

Since the Business model has_many :continents, you'll need to use plural continents, so:

<%= f.select :continents_id_eq, options_from_collection_for_select(Continent.all.order(:name), :id, :name, @q.continent_id_eq), { }, {class: ''} %>

Upvotes: 4

Related Questions