前提
Ruby on Railsで不動産情報を検索するシステムを作っています。
(Home’sやSUUMOのようなもの)
検索結果を表示する機能について、全件検索と複数条件検索ができなくて困っています。
実現したいこと
- 全件検索機能を動作するようにする
- 複数条件検索機能(北海道、かつ、身体障害者可、など都道府県と障害区分の組み合わせ)を動作するようにする
発生している問題・エラーメッセージ
エラーメッセージ:
- なし
考えられる原因:
- 障害区分をチェックしないで検索ボタンを押すと、params[:fearture1]〜params[:fearture4]が0(不可)と判定され、障害者不可で検索されてしまう。
考えられる対策:
- Checkboxを増やし、「可」「不可」を必ず選択させる
該当のソースコード
Ruby
1[houses.controller.rb] 2(前略) 3 def search 4 @houses = House.all 5 .where( 6 'address like ?', 7 "%#{params[:prefecture]}%" 8 ) 9 .where( 10 'feature1 = ? or feature2 = ? or feature3 = ? or feature4 = ?', 11 "#{params[:feature1]}", 12 "#{params[:feature2]}", 13 "#{params[:feature3]}", 14 "#{params[:feature4]}" 15 ) 16 end 17(後略)
Ruby
1[index.html.erb] 2<p style="color: green"><%= notice %></p> 3 4<h1>Houses</h1> 5 6<div> 7 <%= form_with model: @house, url: "/search", method: :get, local: true do |form| %> 8 <%= form.select :prefecture, 9 [ 10 ["北海道", "北海道"], 11 ["青森県", "青森県"], 12 ["岩手県", "岩手県"], 13 ["宮城県", "宮城県"], 14 ["秋田県", "秋田県"], 15 ["山形県", "山形県"], 16 ["福島県", "福島県"], 17 ["茨城県", "茨城県"], 18 ["栃木県", "栃木県"], 19 ["群馬県", "群馬県"], 20 ["埼玉県", "埼玉県"], 21 ["千葉県", "千葉県"], 22 ["東京都", "東京都"], 23 ["神奈川県", "神奈川県"], 24 ["新潟県", "新潟県"], 25 ["富山県", "富山県"], 26 ["石川県", "石川県"], 27 ["福井県", "福井県"], 28 ["山梨県", "山梨県"], 29 ["長野県", "長野県"], 30 ["岐阜県", "岐阜県"], 31 ["静岡県", "静岡県"], 32 ["愛知県", "愛知県"], 33 ["三重県", "三重県"], 34 ["滋賀県", "滋賀県"], 35 ["京都府", "京都府"], 36 ["大阪府", "大阪府"], 37 ["兵庫県", "兵庫県"], 38 ["奈良県", "奈良県"], 39 ["和歌山県", "和歌山県"], 40 ["鳥取県", "鳥取県"], 41 ["島根県", "島根県"], 42 ["岡山県", "岡山県"], 43 ["広島県", "広島県"], 44 ["山口県", "山口県"], 45 ["徳島県", "徳島県"], 46 ["香川県", "香川県"], 47 ["愛媛県", "愛媛県"], 48 ["高知県", "高知県"], 49 ["福岡県", "福岡県"], 50 ["佐賀県", "佐賀県"], 51 ["長崎県", "長崎県"], 52 ["熊本県", "熊本県"], 53 ["大分県", "大分県"], 54 ["宮崎県", "宮崎県"], 55 ["鹿児島県", "鹿児島県"], 56 ["沖縄県", "沖縄県"], 57 ], 58 include_blank: "都道府県" 59 %> 60 <fieldset> 61 <legend>特徴</legend> 62 <label> 63 <%= form.check_box :feature1, {multiple: true} %> 64 身体障害者可 65 </label> 66 <label> 67 <%= form.check_box :feature2, {multiple: true} %> 68 知的障害者可 69 </label> 70 <label> 71 <%= form.check_box :feature3, {multiple: true} %> 72 精神障害者可 73 </label> 74 <label> 75 <%= form.check_box :feature4, {multiple: true} %> 76 発達障害者可 77 </label> 78 </fieldset> 79 <%= form.submit "検索", 'data-disable-with' => false %> 80</div> 81 <% end %> 82 83<div id="houses"> 84 <table> 85 <tr> 86 <th>建物名</th> 87 <th>住所</th> 88 <th>身体障害者</th> 89 <th>知的障害者</th> 90 <th>精神障害者</th> 91 <th>発達障害者</th> 92 <th>詳細</th> 93 </tr> 94 <% @houses.each do |house| %> 95 <% okFlg = "可" %> 96 <% ngFlg = "不可" %> 97 <tr> 98 <%= render house %> 99 <td><%= house.name %></td> 100 <td><%= house.address %></td> 101 <td><%= house.feature1 == true ? okFlg : ngFlg %></td> 102 <td><%= house.feature2 == true ? okFlg : ngFlg %></td> 103 <td><%= house.feature3 == true ? okFlg : ngFlg %></td> 104 <td><%= house.feature4 == true ? okFlg : ngFlg %></td> 105 <td><%= link_to "Show this house", house %></td> 106 </tr> 107 <% end %> 108 </table> 109</div> 110 111<% if session[:user_id] %> 112 <%= link_to "New house", new_house_path %> 113<% end %>
Ruby
1[routes.rb] 2Rails.application.routes.draw do 3 root "houses#index" 4 get "/search" => "houses#search" 5 get "/login" => "users#login_form" 6 post "/login" => "users#login" 7 post "/logout" => "users#logout" 8 get "/signup" => "users#new" 9 resources :users 10 resources :houses 11 # Define your application routes per the DSL in https://guides.rubyonrails.org/routing.html 12 13 # Defines the root path route ("/") 14 # root "articles#index" 15end 16
Ruby
1<p style="color: green"><%= notice %></p> 2 3<h1>Houses</h1> 4 5<div id="houses"> 6 <table> 7 <tr> 8 <th>建物名</th> 9 <th>住所</th> 10 <th>身体障害者</th> 11 <th>知的障害者</th> 12 <th>精神障害者</th> 13 <th>発達障害者</th> 14 <th>詳細</th> 15 </tr> 16 <% @houses.each do |house| %> 17 <% okFlg = "可" %> 18 <% ngFlg = "不可" %> 19 <tr> 20 <%= render house %> 21 <td><%= house.name %></td> 22 <td><%= house.address %></td> 23 <td><%= house.feature1 == true ? okFlg : ngFlg %></td> 24 <td><%= house.feature2 == true ? okFlg : ngFlg %></td> 25 <td><%= house.feature3 == true ? okFlg : ngFlg %></td> 26 <td><%= house.feature4 == true ? okFlg : ngFlg %></td> 27 <td><%= link_to "Show this house", house %></td> 28 </tr> 29 <% end %> 30 </table> 31 <%= link_to "Back to houses", houses_path %> 32</div> 33
試したこと
- 都道府県=選択なし、障害区分選択なしで検索
→検索結果なし
検索結果画面のURLは
・都道府県=ブランク
・障害区分=0(不可)
となっている
補足情報(FW/ツールのバージョンなど)
Rails 7.0.3.1
ruby 3.1.2p20
macOS Montery
Chrome
VSCode

回答1件
あなたの回答
tips
プレビュー