Railsでデータベースにアクセスする。#
データベースとは、アプリケーションの情報を保存・取得する場所です。 Railsでデータベースにアクセスするためにはモデル、Modelを作ると便利です。
一般的にModelとは、システム上の登場人物(登場するモノ)を指します。
Railsでも、Modelは登場人物単位で作ると良いです。 例えば予約システムだと、Modelには「お客様」と、「予約」という登場人物があり、 「お客様」には、氏名、電話番号、アカウント名があり、 「予約」には、日時、注文内容がある、 ような感じです。
ここでは、「お客様」情報としてUser Modelを作ってみます。
前提#
もし、Railsプロジェクトが手元になければ、こちらの手順でRailsプロジェクトを用意してください。
User Model作成#
Modelのためのファイルを作成していきます。 Ruby上でデータを扱うためのModelと、DBを設定するためのMigrationファイルを作成します。 最初に、Modelの内容と型を考えます。 お客様には、氏名(文字列)電話番号(文字列)、アカウント名(文字列) があるとします。
まずは、Migrationファイルを作成します。 db/migrate ディレクトリを作成して、その中に {年月日時分秒}_create_users.rb を作成してくだささい。 というファイルを作成してください。 {年月日時分秒}は今の時間を入れてください。2020年07月25日04時49分53秒だとしたら 20200725044953 です。大体の時間でいいです。 ファイルの内容は以下です。
class CreateUsers < ActiveRecord::Migration[5.2]
def change
create_table :users do |t|
t.string :name
t.string :tel
t.string :account_name
t.timestamps
end
end
end
クラス名は、ファイル名の{年月日時分秒} のあとの文字列の、_の後の文字を大文字にした名前である必要があります。 _ 区切りの文字列をスネークケース、大文字区切りをキャメルケースと呼びます。
さらに、app/models ディレクトリに user.rbを以下の内容で作成します。
class User < ApplicationRecord
end
これでModelが作成されました。
(蛇足ここから) 実は、これらのファイルは、ターミナルで、
rails generate model Usern name:string tel:string account_name:string
と実行すると、テストファイルとともに生成されます。 ここでは、Railsの仕組みを知っていただくために手で作っていただきました。 (蛇足ここまで)
db関連のファイルを作成したら、ターミナルのプロジェクトのホームディレクトリ(rails new . を実行したディレクトリ)で、以下のコマンドを実行します。このコマンドにより
rails db:migrate
このコマンドにより、migrationファイルが読み込まれて、データベースにデータを保存する場所が作られました。
データの作成、参照、更新、削除#
これでデータの作成、参照、更新、削除ができるようになりましたので、Controllerを作成して、それらの機能を呼んでいきます。 app/controllers ディレクトリに user_controller.rb を作成します。
class UserController < ApplicationController
def create
if params[:name].blank? || params[:tel].blank? || params[:account_name].blank?
render status: 400, json: { status: 400, message: 'Bad Request' }
return
end
user = User.new(name: params[:name].to_s, tel: params[:tel], account_name: params[:account_name])
user.save!()
render :json => user
end
def refer
users = User.all
render :json => users
end
def referOne
if params[:id].blank?
render status: 400, json: { status: 400, message: 'Bad Request' }
return
end
begin
user = User.find(params[:id].to_i)
render :json => user
rescue
render status: 404, json: { status: 404, message: 'Not Found' }
end
end
def update
if params[:id].blank?
render status: 400, json: { status: 400, message: 'Bad Request' }
return
end
begin
user = User.find(params[:id].to_i)
if params[:name]
user.name = params[:name]
end
if params[:tel]
user.tel = params[:tel]
end
user.save!()
render :json => user
rescue
render status: 404, json: { status: 404, message: 'Not Found' }
end
end
def delete
if params[:id].blank?
render status: 400, json: { status: 400, message: 'Bad Request' }
return
end
User.find(params[:id]).destroy
render body: nil
end
end
Railsには色々と便利な仕組みがあるのですが、何をやっているかわかるように、できるだけ使わずに作っています。 UserControllerには5つのメソッドを作りました。 create 新規作成 refer 全件取得 referOne 一見取得 update 更新 delete 削除 各メソッドの中で、Modelに対して処理を実行しています。どんなふうに呼び出しているかはソースコードを呼んでみてください。
後はconfig/routes.rb に以下の行を追加します。
Rails.application.routes.draw do
# 省略
# ここから
get '/api/users/create', to: 'user#create'
get '/api/users', to: 'user#refer'
get '/api/users/:id', to: 'user#referOne'
get '/api/users/:id/update', to: 'user#update'
get '/api/users/:id/delete', to: 'user#delete'
# ここまでをendの前に追記
# 省略
end
本当であれば、getメソッド以外にも、postメソッド、putメソッド、deleteメソッドを使うとスマートなのですが、 今回はブラウザから簡単に呼び出せるように、全てgetメソッドで追加してあります。
ターミナルでrailsを起動します。railsディレクトリで以下のコマンドを実行してください。
rails s
では、最初にデータを作成します。 ブラウザで以下のURLにアクセスしてみてください。
[http://localhost:3000/api/users/create?name=比古清十郎&tel=000(0000)0000&account_name=hiko]{http://localhost:3000/api/users/create?name=%E6%AF%94%E5%8F%A4%E6%B8%85%E5%8D%81%E9%83%8E&tel=000(0000)0000&account_name=hiko)
すると、以下のような表示がされたと思います。
{"id":1,"name":"比古清十郎","birth":null,"age":null,"rank":null,"created_at":"2020-07-25T15:03:36.588Z","updated_at":"2020-07-25T15:03:36.588Z","account_name":"hiko","tel":"000(0000)0000"}
idや時間はこれとは異なっているかもしれません。
[http://localhost:3000/api/users/]{http://localhost:3000/api/users/) では一覧が、 [http://localhost:3000/api/users/1]{http://localhost:3000/api/users/1) では、1件取得ができます。(最後の数字は、作成時に得られたidを入れてください。)
[http://localhost:3000/api/users/1/update?name=弥彦&tel=111(1111)1111]{http://localhost:3000/api/users/create?name=%E6%AF%94%E5%8F%A4%E6%B8%85%E5%8D%81%E9%83%8E&tel=111(1111)1111) とすると、更新されたJSONが表示され、再び [http://localhost:3000/api/users/1]{http://localhost:3000/api/users/1) をブラウザで表示すると、情報が更新されているのがわかります。
さらに [http://localhost:3000/api/users/1/delete]{http://localhost:3000/api/users/1/delete) をブラウザで表示すると、データが削除され、
[http://localhost:3000/api/users/]{http://localhost:3000/api/users/) 一覧から該当のidのデータが削除されています。
これでRailsでデータを扱うことができました。 次はVueという仕組みを使って画面を作っていきましょう!