前提・実現したいこと
gem "ransack"を使ってネストされたモデルの更にネストされたデータを検索して表示させたいです。
こちらの記事を参考に親モデルからそれに紐づく子モデルのカラムを使って検索する方法を知りました。
参考:https://qiita.com/sew_sou19/items/520d4348b2eaa7bf792c
しかしそこから更にネストされたモデルのデータというのは検索できないのでしょうか?
もし知っている方が居ましたら教えて頂けないでしょうか汗
該当のソースコード
例えばこんな感じで出来るかと考えたのですが無理でしょうか汗
ruby
1shopモデルにネストしたareaモデルのカラムで検索する場合 2 3= search_form_for(@q, url: shop_search_path) do |f| 4 = f.text_field :area_name_cont 5 # shopモデルに紐づくareaモデルのnameカラム(エリアの名前)でデータがないか検索 6 7shopモデルにネストしたareaモデルにネストしたstaffモデルのカラムで検索する場合 8 9= search_form_for(@q, url: shop_search_path) do |f| 10 = f.text_field :area_staff_name_cont 11 # shopモデルに紐づくareaモデルに紐づくstaffモデルのnameカラム(staffの名前)でデータがないか検索 12 13
試したこと
例であげたコードを自分の使用しているモデルに置き換えて実装しようとしたのですが、ネストのネストされたモデルを検索することができなかったです。
エラー内容 undefined method `masseurs_business_trip_ranges_cities_prefectures_name_cont' for Ransack::Search<class: Store, base: Grouping <combinator: and>>:Ransack::Search
補足情報(FW/ツールのバージョンなど)
お返事遅くなってしまい申し訳ありません汗
モデル関係がややこしいのでER図も添えました。
今回具体的にやろうとしたいのが、お店(storeモデル)に所属しているマッサージ師の出張範囲を市町村(Cityモデル)の名前(city_nameカラム)から検索したいというものです。
今のところお店の名前では検索出来るようになっているのですが、そこからネストされたモデルのカラムから検索する事が出来ないでいます汗
modelの関係性
Store has_many :masseurs, dependent: :destroy Masseur has_many :business_trip_ranges, dependent: :delete_all has_many :cities, through: :business_trip_ranges BusinessTripRange belongs_to :masseur belongs_to :city City has_many :masseurs, through: :business_trip_ranges has_many :business_trip_ranges Prefecture has_many :cities, dependent: :delete_all
shop.html.erb <%= search_form_for @search, url: shop_path do |f| %> # storeの名前で検索は出来る <%= f.label :store_name_cont, '名前' %> <%= f.search_field :store_name_cont %> # マッサージ師が持っている出張範囲で検索が出来ない <%= f.collection_select :masseurs_business_trip_ranges_cities_city_name_cont, City.all, :name, :name %> <%= f.submit '検索' %> <% end %> <% @store_result.each do |store| %> <%= store.store_name %> <% end %>
shop_controller def shop # マッサージ師の検索機能 @search = Store.ransack(params[:q]) @store_result = @search.result end
回答1件
あなたの回答
tips
プレビュー