Ruby on Railsのルーターとデータベースについて簡単にまとめる
将来Ruby on Railsで開発するかもしれないのでRuby on Railsに触れておきたいと思います。
やはりRuby on Railsの開発の作法を知っておかないと。
MVCに従わなければいけないということは知っているのですが、個人的に気になる部分をまとめておきます。
コントローラーがモデルから情報を受け取り、ビューに表示するという作業を担当しているので、コントローラーを軸に確認していきたいと思います。
コントローラーを実行するところからですね。
ルーター
railsはurlに応じて呼び出すコントローラーのメソッドを決定します。
これを行うのがルーターです。
設定は/config/routes.rbにいろいろ書いていきます。
1 2 3 4 5 |
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は以下のように作成します。
1 |
rails g controller top index |
例で挙げたControllerはこんな感じです。
1 2 3 4 5 6 7 8 9 10 |
class TopController < ApplicationController def index @message = "index method" end def login @message = "login method" end end |
ルーティングについては上で示した方法でも別にいいんですが、なにやらリソースベースのルーティングというものがあるそうです。
routes.rbに以下のように記述します。
1 2 3 |
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のみを使います。
1 |
resources :infos, only: [:index, :show] |
これでひとまずコントローラーの作成からアクションの実行、htmlの表示まではできるようになりました。
まだまだルーターに関してはいろいろあると思いますが、ひとまずこれくらいでいいでしょう。
データベース
データベースの設定などはconfig/database.ymlに記載していきます。
railsでは、sqllite3を使用する場合は変更する必要はありませんが、mysqlなどほかのデータベースを使う場合は修正する必要があります。
railsではデータベースにアクセスする際にモデルというものを使用します。
モデルは以下のようにして作成します。
1 |
rails g model info |
モデルの中身はこのようになっております。
1 2 3 4 5 |
class Info < ApplicationRecord validates :title, :body, presence: true validates :title, length: {maximum: 10} validates :body, length: {maximum: 50} end |
ここではinfoモデルを作成しています。
そしてモデルに対応するテーブルを作ります。
上のコマンドを実行した時点でマイグレーションファイルというものが作成されます。
ファイルは/db/migrate/にあります。
このファイルの中にカラムを追加していきます。
たとえばこんな感じに。
1 2 3 4 5 6 7 8 9 10 |
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の二つのカラムが追加されます。
マイグレーションファイルはこのように実行します。
1 |
rails db:migrate |
モデルオブジェクトはこのようにデータベースをいろいろします。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
#データを挿入 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のレコードを削除 |
他にもメソッドが用意されてますが、これだけ覚えておけば問題ないかと思います。
バリデーションやらセキュリティなど知っておかないといけないことはほかにもありますが、
ひとまずこれで簡単なものは作れるようになりました。