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

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

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

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

Ruby on Rails 6

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

Ruby on Rails

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

検索

検索は、あるデータの集まりの中から 目的のデータを見つけ出すことです。

Q&A

解決済

1回答

528閲覧

一覧検索で初めは全ての値を出力したい

ikedayuuki

総合スコア24

Ruby

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

Ruby on Rails 6

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

Ruby on Rails

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

検索

検索は、あるデータの集まりの中から 目的のデータを見つけ出すことです。

0グッド

0クリップ

投稿2020/11/02 05:27

前提・実現したいこと

現在、railsにて顧客管理のアプリを作成しているのですが、
初めは全ての一覧を出力したいのですが、どうすればいいかわかりません。
またid 1のみ除外して、検索したいです。
何卒、よろしくお願いいたします

発生している問題・エラーメッセージ

初めは何も一覧画面に出ません。 また検索すると、id 1も検索に引っかかります。

該当のソースコード

searcheacontoroller

ruby

1 def index 2 @searches = Search.where.not(id: 1) 3 if params[:family_name].present? 4 @searches = Search.where('family_name LIKE ?', "%#{params[:family_name]}%") 5 else 6 @searches = Search.none 7 end 8 end

search.rb

ruby

1class Search< ApplicationRecord 2 extend ActiveHash::Associations::ActiveRecordExtensions 3 belongs_to_active_hash :sex 4 belongs_to :user, optional: true 5 has_one :home 6end 7

routes

ruby

1Rails.application.routes.draw do 2 get 'searches',to: "searches#index" 3 mount RailsAdmin::Engine => '/admin', as: 'rails_admin' 4 devise_for :users, controllers: { 5 omniauth_callbacks: 'users/omniauth_callbacks', 6 registrations: 'users/registrations' 7 } 8 post '/callback' => 'linebot#callback' 9 get 'homes/index' 10 resources :homes, only: [:index] 11 root to: 'home#index' 12 resources :users 13 resources :attendances 14 resources :daytimes 15 resources :restaurants, only: [:index, :show] 16 resources :searches do 17 collection do 18 get 'search' 19 end 20 end 21 namespace :admin do 22 resources :restaurants, only: [:index, :new, :create, :show, :edit, :destroy] 23 end 24end 25

index.html.erb

<%= form_with url: searches_path, method: :get, local: true do |f| %> <%= f.text_field :family_name, class: "sea1" %> <%= f.submit class: "button is-warning" %> <% end %> <table> <thead class = "category"> <tr> <th><i class="fas fa-user"></i> 名前</th> <th>フリカナ</th> <th><i class="fas fa-venus-mars"></i> 性別</th> <th>年齢</th> <th><i class="fas fa-building"></i> 会社名</th> <th>役職</th> <th><b>〒</b>郵便番号</th> <th><i class="fas fa-map-marker-alt"></i> 住所</th> <th><i class="fas fa-phone"></i> 電話番号</th> <th colspan="9"></th> </tr> </thead> <tbody> <% @searches.each do|search| %> <tr> <th class = addless><%= search.family_name %> <%= search.first_name %> &emsp;</th> <th class = addless><%= search.family_name_kana %> <%= search.first_name_kana %> &emsp;</th> <th class = addless><%= search.sex.name %> &emsp;</th> <% if search.age == nil %> <th class = addless><%= "" %> <% else %> <th class = addless><%= "#{Time.now.year - search.age.year}歳" %> &emsp;</th> <% end %> <th class = addless><%= search.company %> &emsp;</th> <th class = addless><%= search.position %></th> <% search.postal_code.to_s.insert(3, "-")%> <th class = addless><%= search.postal_code %> &emsp;</th> <th class = addless><%= search.address1 %> <%= search.address2 %> <%= search.address3 %> <%= search.building_name %> &emsp;</th> <th class = addless><%= search.phone_number %></th> <th>&nbsp;<%= link_to '詳細', search,class: "button is-info" %>&nbsp;</th> <th><%= link_to '編集', edit_search_path(search.id),class: "button is-success" %>&nbsp;</th> <th><%= link_to '削除',search_path(search.id), method: :delete,class: "button is-danger", data: { confirm: '本当に削除してよろしでしょうか?' } %></th> </tr> <% end %> </tbody> </table>

試したこと

controllerのif文に

def index if @searches = Search.where.not(id: 1) elsif params[:family_name].present? @searches = Search.where('family_name LIKE ?', "%#{params[:family_name]}%") else @searches = Search.none end end

とすると一覧は出るのですが、検索ができなくなってしまいます。

補足情報(FW/ツールのバージョンなど)

ruby '2.6.5'

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

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

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

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

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

guest

回答1

0

ベストアンサー

params[:family_name]

こちらが検索語句でしょうか?その場合は以下のようにすると良いと思います。

def index if params[:family_name].present? @searches = #検索する処理。 else @searches = Search.all end end

パラメータ(検索語句)があった場合は@serchesに検索結果を入れ、それ以外は全てのインスタンスを取得するという形です。

id 1のみ除外して、検索したい

where.notを使うのであれば以下になりますね。rails consoleで試してみてください。

Search.where.not(id: 1)

投稿2020/11/02 07:46

ykp_yk

総合スコア654

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

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

ikedayuuki

2020/11/02 09:06

コントローラー内に入れるとすればどのように記述したらいいでしょうか? ``` def index if params[:family_name].present? @searches = Search.where('family_name LIKE ?', "%#{params[:family_name]}%")||Search.where.not(id: 1) else @searches = Search.where.not(id: 1) end end ``` とすると検索すると出てきてしまいます。
ykp_yk

2020/11/02 09:12

> 検索すると出てきてしまいます。 何が出てくるのでしょうか?
ykp_yk

2020/11/02 09:51

まずrails consoleで試しましょう。 コンソール上ではどのようなSQLが発行されるかがわかります。 学習中なのであれば尚更です。 いきなりコントローラに実装してもSQLがわかならいので何を直したらよいのかわからないと思います。 `||` は何をしているかわかりますか?今回はこの記述は必要ないですね。。。。。 よくわかっていないコードを実装するのは良くないのでしっかり調べましょう。 除外するコードは調べてみましたか? 質問を丸投げにする前に自分で調べましょう。(質問する際の注意事項にも書いてあります) https://qiita.com/ysKey2/items/a9b945494b41354ff6fe
ikedayuuki

2020/11/02 10:50

お手数かけましたが、無事行けました。 ありがとうございました
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問