実現したいこと
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