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

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

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

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

Ruby on Rails 6

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

解決済

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

pure_dorayaki
pure_dorayaki

総合スコア6

Ruby

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

Ruby on Rails 6

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

1回答

1グッド

0クリップ

137閲覧

投稿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👍を押しています

以下のような質問にはグッドを送りましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

グッドが多くついた質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

下記のような質問は推奨されていません。

  • 間違っている
  • 質問になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

適切な質問に修正を依頼しましょう。

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

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

回答1

0

自己解決

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

投稿2022/12/01 05:58

pure_dorayaki

総合スコア6

良いと思った回答にはグッドを送りましょう。
グッドが多くついた回答ほどページの上位に表示されるので、他の人が素晴らしい回答を見つけやすくなります。

下記のような回答は推奨されていません。

  • 間違っている回答
  • 質問の回答になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

このような回答には修正を依頼しましょう。

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

ただいまの回答率
86.12%

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

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

質問する

関連した質問

同じタグがついた質問を見る

Ruby

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

Ruby on Rails 6

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