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

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

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

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

Ubuntu

Ubuntuは、Debian GNU/Linuxを基盤としたフリーのオペレーティングシステムです。

Ruby on Rails

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

Q&A

1回答

658閲覧

railsでDBのidと照合して合致するレコードを表示させたい

kozica

総合スコア58

MySQL

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

Ubuntu

Ubuntuは、Debian GNU/Linuxを基盤としたフリーのオペレーティングシステムです。

Ruby on Rails

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

0グッド

0クリップ

投稿2018/07/18 06:49

実現したいこと

railsでテキスト入力を作り、そこの打ち込まれた数字とDBのテーブルのidと照合して、合致するidのレコードをviewで表示するようにしたいです。

また、DBにはdataカラムがあり、そこには暗号化された個人情報が入ってて、それを復号化してviewで表示させるようにしてます。
idで照合して表示させるdataカラムは復号化されたものを表示させたいです。

今は復号化されたdataカラムをすべて表示させるだけのもになってます

こうする背景としてはテーブルをそのままviewで表示させると何万件もレコードがあり、処理に時間がかかるためです。

personal_logsテーブル
カラム一覧
id   int(11) PRI
logid  varchar(32)
macaddr varchar(20)
aid varchar(20)
auth_policy varchar(20)
provider varchar(20)
data text
cdate datetime
udate datetime

該当のソースコード

ruby

1#model/personal_log.rb 2#dataカラムを復号化させるメソッド 3require 'openssl' 4require 'base64' 5 6class PersonalLog < ApplicationRecord 7 8 def decrypted_data 9 cipher = OpenSSL::Cipher.new("aes-256-ecb") 10 cipher.decrypt 11 key = self.logid.each_char.uniq.join 12 cipher.key = (key + "\0"*32)[0,32] 13 return cipher.update(Base64.decode64 self.data) + cipher.final 14 end 15end 16

ruby

1#index.html.erb 2<h1>Personal Logs</h1> 3 4<table border = "5"> 5 6<thead> 7 <tr> 8 <th>data</th> 9 </tr> 10</thead> 11 <% @personal_logs.each do |personal_log| %> 12 <tbody> 13 <tr> 14 <td><%= personal_log.decrypted_data %></td> 15 </tr> 16 </tbody> 17 <% end %> 18</table>

ruby

1#personal_logs_controller.rb 2class PersonalLogsController < ApplicationController 3 before_action :set_personal_log, only: [:show, :edit, :update, :destroy] 4 5 def index 6 @personal_logs = PersonalLog.all 7 end 8 9 def show 10 end 11 12 def new 13 @personal_log = PersonalLog.new 14 end 15 16 def edit 17 end 18 19 def create 20 @personal_log = PersonalLog.new(personal_log_params) 21 22 respond_to do |format| 23 if @personal_log.save 24 format.html { redirect_to @personal_log, notice: 'Personal log was successfully created.' } 25 format.json { render :show, status: :created, location: @personal_log } 26 else 27 format.html { render :new } 28 format.json { render json: @personal_log.errors, status: :unprocessable_entity } 29 end 30 end 31 end 32 33 def update 34 respond_to do |format| 35 if @personal_log.update(personal_log_params) 36 format.html { redirect_to @personal_log, notice: 'Personal log was successfully updated.' } 37 format.json { render :show, status: :ok, location: @personal_log } 38 else 39 format.html { render :edit } 40 format.json { render json: @personal_log.errors, status: :unprocessable_entity } 41 end 42 end 43 end 44 45 def destroy 46 @personal_log.destroy 47 respond_to do |format| 48 format.html { redirect_to personal_logs_url, notice: 'Personal log was successfully destroyed.' } 49 format.json { head :no_content } 50 end 51 end 52 53 private 54 between actions. 55 def set_personal_log 56 @personal_log = PersonalLog.find(params[:id]) 57 end 58 59 def personal_log_params 60 params.fetch(:personal_log, {}) 61 end 62end

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

os:ubuntu18.04
Rails:5.2.0
ruby:2.5.1
mysql:Ver 14.14 Distrib 5.7.22

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

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

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

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

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

Orlofsky

2018/07/18 09:25

SQL入門レベルのことですが、テーブル定義はCREATE TABLE文に直しませんか?
guest

回答1

0

フォームで送信した値でPersonalLog.where()を使って絞り込めば実現できます。

ruby

1def self.search(search) 2 if search 3 PersonalLog.where(['id LIKE :search', search: "#{search}"]) 4 else 5 PersonalLog.all 6 end 7end

ruby

1@personal_logs = PersonalLog.search(params[:search])

具体的な書き方です。どうぞ。
あとはviewにフォームを作ればできます。

投稿2018/07/18 07:51

編集2018/07/18 08:51
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

kozica

2018/07/18 07:54

具体的にはどのように書けばよろしいでしょうか??
退会済みユーザー

退会済みユーザー

2018/07/18 08:53

追記しました。 が、まずは自分で調べたりしましたか? 自分で調べてみる癖をつけた方がいいと思いますよ。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

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

アカウントをお持ちの方は

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問