質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Q&A

解決済

1回答

4545閲覧

ransackを使ってネストされたモデルのデータを検索したい

jun3030

総合スコア16

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

0グッド

0クリップ

投稿2020/09/23 14:03

編集2020/09/25 05:25

前提・実現したいこと

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

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

winterboum

2020/09/24 08:51

modelの関連定義を載せて
jun3030

2020/09/25 05:23

返信遅くなってしまい申し訳ありません。 補足にモデル関連の情報等追加致しました! お忙しい中申し訳ありませんが、お手隙に観ていただければ幸いです。
guest

回答1

0

ベストアンサー

:masseurs_cities_city_name_cont
で行きませんか?

なお、
city に belogns_to :prefecture を追加しておくほうが良いです

投稿2020/09/25 05:33

winterboum

総合スコア23567

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

jun3030

2020/09/25 08:23

解答ありがとうございます! おっしゃる通り:masseurs_cities_city_name_contで実装できました! 今まで中間テーブルに配置したbusiness_trip_rangeを記載していたのが間違いだったようです汗 大変勉強になりました!本当にありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問