Ruby on Railsのルーターとデータベースについて簡単にまとめる


将来Ruby on Railsで開発するかもしれないのでRuby on Railsに触れておきたいと思います。
やはりRuby on Railsの開発の作法を知っておかないと。
MVCに従わなければいけないということは知っているのですが、個人的に気になる部分をまとめておきます。


コントローラーがモデルから情報を受け取り、ビューに表示するという作業を担当しているので、コントローラーを軸に確認していきたいと思います。
コントローラーを実行するところからですね。

ルーター

railsはurlに応じて呼び出すコントローラーのメソッドを決定します。
これを行うのがルーターです。
設定は/config/routes.rbにいろいろ書いていきます。

Rails.application.routes.draw do
  root "top#index"
  get "login" => "top#login"
end

これはルーターの記述例です。
ドメインがrails.comだとして、
rails.com/にアクセスがあったらTopControllerのindexメソッドが呼ばれます。
そしてapp/view/top/index.html.erbのhtmlがブラウザに表示されます。
rails.com/loginにアクセスがあったらTopControllerのloginメソッドが呼ばれます。
そして app/view/top/login.html.erbのhtmlがブラウザに表示されます。

ちなみにControllerは以下のように作成します。

rails g controller top index

例で挙げたControllerはこんな感じです。

class TopController < ApplicationController
  def index
    @message = "index method"
  end

  def login
    @message = "login method"
  end

end

ルーティングについては上で示した方法でも別にいいんですが、なにやらリソースベースのルーティングというものがあるそうです。
routes.rbに以下のように記述します。

Rails.application.routes.draw do
  resources: infos
end

こうすることでInfosControllerのindex,new,create,show,edit,update,destroyメソッドにアクセスできます。

railsはこれらのメソッドに以下のような機能を持たせてほしいらしいです。

  • indexはデータの一覧表示
  • newは新規登録のためのフォームを表示する
  • createはテーブルにレコードを追加する
  • showはデータの除法を表示する
  • editはデータの更新のためのフォームを表示する
  • updateはリソースを更新する
  • destroyはリソースを削除する


ただこれらのメソッドすべては必要ない時もあると思います。
routes.rbに以下のように記述します。
このコントローラーはindexとshowのみを使います。

resources :infos, only: [:index, :show]

これでひとまずコントローラーの作成からアクションの実行、htmlの表示まではできるようになりました。
まだまだルーターに関してはいろいろあると思いますが、ひとまずこれくらいでいいでしょう。

データベース

データベースの設定などはconfig/database.ymlに記載していきます。
railsでは、sqllite3を使用する場合は変更する必要はありませんが、mysqlなどほかのデータベースを使う場合は修正する必要があります。

railsではデータベースにアクセスする際にモデルというものを使用します。
モデルは以下のようにして作成します。

rails g model info

モデルの中身はこのようになっております。

class Info < ApplicationRecord
    validates :title, :body, presence: true
    validates :title, length: {maximum: 10}
    validates :body, length: {maximum: 50}
end

ここではinfoモデルを作成しています。
そしてモデルに対応するテーブルを作ります。
上のコマンドを実行した時点でマイグレーションファイルというものが作成されます。
ファイルは/db/migrate/にあります。
このファイルの中にカラムを追加していきます。
たとえばこんな感じに。

class CreateInfos < ActiveRecord::Migration[5.1]
  def change
    create_table :infos do |t|
      t.string :title, null:false
      t.string :body, null:false
      t.timestamps
    end
  end
end

ここではtitleカラムとbodyカラムを追加しています。
timestampsはマイグレーションファイルの作成時にデフォルトで記述されているものです。
この記述があるとcreated_atとupdated_atの二つのカラムが追加されます。
マイグレーションファイルはこのように実行します。

rails db:migrate

モデルオブジェクトはこのようにデータベースをいろいろします。

#データを挿入
Info.create(title: "title1", body: "body1")

#こんな方法でも
info = Info.new
info.title="title1"
info.body = "body1"
info.save

#データ取得
Info.find(1) #idが1のものを
Info.find_by(title: "title1") #titleが「title1」のもの
Info.where(title: "title1").load #titleが「title1」のもの
Info.where.not(title: "title1") #titleが「title1」じゃないやつ
Info.where("title =? OR body = ?", "title1", "body2") #titleが「title1」のデータかbodyが「body2」のデータ

Info.find_by_sql("select * from infos where id = 1") #sqlを直接指定できる

#データ更新
info = Info.find(1)
info.title = "titletitle1"
info.save

#データ削除
Info.delete(1) #idが1のレコードを削除

他にもメソッドが用意されてますが、これだけ覚えておけば問題ないかと思います。

バリデーションやらセキュリティなど知っておかないといけないことはほかにもありますが、
ひとまずこれで簡単なものは作れるようになりました。