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

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

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

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

Ruby on Rails 6

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

Q&A

解決済

1回答

568閲覧

ransackで1ページに2つのインスタンスに対して検索したい

pure_dorayaki

総合スコア6

Ruby

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

Ruby on Rails 6

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

1グッド

0クリップ

投稿2022/11/30 11:31

前提

ransackを使用し、1ページで2つのインスタンスクラスに対して検索できるようにしたいです。

実現したいこと

マイリストボタンを押して、検索するとマイリスト一覧の検索ができ、
他リストボタンを押して、検索すると他リスト一覧での検索ができるようにしたいです。
現状は、それぞれの一覧は表示できますが、検索ボタンを押すとどちらもマイリストでの絞り込みの結果が返ってきます。
Image from Gyazo

該当のソースコード

r.rb

1# params[:set]は、他リスト、マイリストボタン用のクエリ文字の場合分けです。 2 3 def index 4 if params[:set] == "other_list" 5 @other_list = Restaurant.where.not(user_id: current_user.id).ransack(params[:other], search_key: :other) 6 @restaurants = @other_list.result(distinct: true) 7 elsif params[:set] == "my_list" 8 @my_list = current_user.restaurants.ransack(params[:q]) 9 @restaurants = @my_list.result(distinct: true) 10 else 11 12 @other_list= Restaurant.where.not(user_id: current_user.id).ransack(params[:other], search_key: :other) 13 @restaurants = @other_list.result(distinct: true) 14 15 @my_list = current_user.restaurants.ransack(params[:q]) 16 @restaurants = @my_list.result(distinct: true) 17 end 18 @random_select = @restaurants.shuffle.first 19 end

検索する↓このページは、部分ページです。

r.html.erb

1<% if @restaurants.find_by(user_id: current_user.id) == nil %> 2 <%= search_form_for @other_list, as: :other do |f| %> 3 <%= f.search_field :rst_name_cont, class: "input input-bordered w-full max-w-xs" %> 4 <%= f.submit class: 'btn btn-success' %> 5 <% end %> 6<% else %> 7 <%= search_form_for @my_list do |f| %> 8 <%= f.search_field :rst_name_cont, class: "input input-bordered w-full max-w-xs" %> 9 <%= f.submit class: 'btn' %> 10 <% end %> 11<% end %>

試したこと

@my_list は、params[:q]を受け取り、
@other_listは、params[:other], search_key: :otherのように受け取るキーを変える設定をしましたが、うまくいきませんでした。
受け取るキーを変更すると場合分けできるかと思いましたが、キー変更というのは単にデフォルトのqを別に変えれるというだけでしょうか。。

shinoharat👍を押しています

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

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

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

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

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

yuma.inaura

2022/11/30 14:21

params[:set] ってどこから来た値なんでしょう?
pure_dorayaki

2022/12/01 00:21

ご返信ありがとうございます! params[:set]は、マイリスト、他リストボタンを押した際、一覧の表示内容を分けるために与えた値です ``` <div class="navbar-end"> <%= link_to (t 'defaults.restaurants_list'), restaurants_path(set: "other_list"), class: "btn btn-primary" %> <%= link_to 'マイリスト', restaurants_path(set: "my_list"), class: "btn btn-primary" %> </div> ```
pure_dorayaki

2022/12/01 00:46

新しくコントローラーを作って分けた方が良いでしょうか?
guest

回答1

0

自己解決

新しくコントローラーを作りました。
コントローラーを継承したので、新しく作成するビューは1つだけに済み、コントローラーの記述もスッキリしてよかったです。

投稿2022/12/01 05:58

pure_dorayaki

総合スコア6

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問