前提・実現したいこと
ユーザー検索において、ユーザー名(:name
)とキーワード(:introducion
、自己紹介欄の中身)での絞り込み機能を実装しました。
しかしユーザー名の絞り込みではヒットするものの、キーワード検索ではユーザーがヒットせず、ユーザー一覧(User.all
)が表示されてしまいます。
該当のソースコード
Gemfile
gem 'ransack'
routes.rb
get 'users/index' => 'users#index'
users_controller.rb
ruby
1class UsersController < ApplicationController 2 def index 3 if params[:name || :introduction].present? 4 @users = User.where(['name LIKE ? AND introduction LIKE ?', "%#{params[:name]}%", "%#{params[:introduction]}%"]).page(params[:page]).per(20) 5 else 6 @users = User.all.order(created_at: :desc).page(params[:page]).per(20) 7 end 8 9 # ユーザーが該当しなかった時。 10 if @users == [] 11 @users = User.all.order(created_at: :desc).page(params[:page]).per(20) 12 end 13 end 14end
users/index.html.erb
<%= form_with url: users_path, method: :get, local: true do |f| %> <p>User name</p> <%= f.text_field :name %> <p>Keyword</p> <%= f.text_field :introduction %> <%= f.submit :search %> <% end %> <% @users.each do |user| %> <div><%= link_to(user.name, "/users/#{user.id}") %></div> <% end %>
試したこと
実は一度、上記のコードで上手く動いていたのです。
ですので次に性別(:sex
)でも絞り込みをかけようとコードを追加 → ビューにて動作確認をしていました。
ですが上手く動かなかったため、性別(:sex
)関連のコードを一旦消し、再びユーザー名(:name
)とキーワード(:introducion
)のみの状態に戻しました。すると動いていたはずのキーワード(:introducion
)の絞り込みも動かなくなった、と言う経緯がありました。
因みに追加していた性別(:sex
)関連も含めたコードは以下の通りです。
users_controller.rb
ruby
1class UsersController < ApplicationController 2 def index 3 if params[:name || :introduction || :sex].present? 4 @users = User.where(['name LIKE ? AND introduction LIKE ? AND sex LIKE ?', "%#{params[:name]}%", "%#{params[:introduction]}%", "%#{params[:sex]}%"]).page(params[:page]).per(20) 5 else 6 @users = User.all.order(created_at: :desc).page(params[:page]).per(20) 7 end 8 9 # ユーザーが該当しなかった時。 10 if @users == [] 11 @users = User.all.order(created_at: :desc).page(params[:page]).per(20) 12 end 13 end 14end
users/index.html.erb
<%= form_with url: users_path, method: :get, local: true do |f| %> <p>User name</p> <%= f.text_field :name %> <p>Keyword</p> <%= f.text_field :introduction %> <p>Gender</p> <%= f.radio_button :sex, :value => "Male" %>Male <%= f.radio_button :sex, :value => "Female" %>Female <%= f.submit :search %> <% end %> <% @users.each do |user| %> <div><%= link_to(user.name, "/users/#{user.id}") %></div> <% end %>
同じコードを記述していても、例えばその前に起こしたアクション等の影響でコードが動かなくなる様な事は有り得るのでしょうか?
コードの間違いが見つけられませんでしたので、質問させて頂きました。
どなたかご助言を頂けますと有難いです。
補足情報(FW/ツールのバージョンなど)
ruby 2.6.4p104
RubyGems 3.0.3
Rails 5.2.3
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/03/06 03:33
2021/03/06 04:31
2021/03/06 06:19