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

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

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

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

Ruby

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

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

受付中

レコード取得の記述をもっと綺麗に書きたい

rnanayo
rnanayo

総合スコア0

Ruby on Rails 5

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

Ruby

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

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

1回答

-1評価

1クリップ

99閲覧

投稿2022/05/10 11:58

前提

フォームで入力された条件で、レコードの検索をかけるときにフォームの各項目に値があるかどうかでwhere文が変わります。
当初は、各項目を必須にすることはできないため、すべてのwhere文でワイルドカードであいまい検索を行っていました。
そうすると、処理が重くなってしまうため各項目の有無によってwhere文をわけるようにしました。

フォーム内容を必須にすることは考えていません。

実現したいこと

もう少し、簡潔に記述できるのではないかと思っているのですが、その方法があれば教えていただきたいです。

該当のソースコード

/model/history.rb

ruby

def self.find_records(params) logger.info(params) shop_name = params[:shop].present? ? params[:shop] : '' start_time = params[:start_time] end_time = params[:end_time] first_name = params[:first_name].present? ? params[:first_name] : '' last_name = params[:last_name].present? ? params[:last_name] : '' status = params[:status].present? ? params[:status] : '' production_flg = (params[:first_name].present? && params[:last_name].present?) == true ? true : false # shop_id、status、prodction if shop_id != '' && status != '' && production_flg record = self.joins(:shop, :production) .select('histories.*, productions.first_name, productions.last_name, shops.name') .where("first_name = ?", "#{first_name}") .where("last_name = ?", "#{last_name}") .where("name = ?", "#{shop_name}") .where("status = ?", "#{status}") .where("start_time BETWEEN '#{start_time}' and '#{end_time}'") .order("start_time") # shop_id, status elsif shop_id != '' && status != '' record = self.joins(:shop, :production) .select('histories.*, productions.first_name, productions.last_name, shops.name') .where("first_name LIKE ?", "%#{first_name}%") .where("last_name LIKE ?", "%#{last_name}%") .where("name = ?", "#{shop_name}") .where("status = ?", "#{status}") .where("start_time BETWEEN '#{start_time}' and '#{end_time}'") .order("start_time") # shop_id elsif shop_id != '' record = self.joins(:shop, :production) .select('histories.*, productions.first_name, productions.last_name, shops.name') .where("first_name LIKE ?", "%#{first_name}%") .where("last_name LIKE ?", "%#{last_name}%") .where("name = ?", "#{shop_name}") .where("status LIKE ?", "%#{status}%") .where("start_time BETWEEN '#{start_time}' and '#{end_time}'") .order("start_time") else record = self.joins(:shop, :production) .select('histories.*, production.first_name, production.last_name, shops.name') .where("first_name LIKE ?", "%#{first_name}%") .where("last_name LIKE ?", "%#{last_name}%") .where("name LIKE ?", "%#{shop_name}%") .where("status LIKE ?", "%#{status}%") .where("start_time BETWEEN '#{start_time}' and '#{end_time}'") .order("start_time") end return record end

良い質問の評価を上げる

以下のような質問は評価を上げましょう

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

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

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

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

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

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

まだ回答がついていません

会員登録して回答してみよう

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

ただいまの回答率
87.20%

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

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

質問する

関連した質問

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

Ruby on Rails 5

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

Ruby

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

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。