Rails でシンプルなウェブアプリを作る
こんにちは。
今記事では初めてRubyとRailsを使って練習プロジェクトとして簡単なウェブアプリを作りました。
最終的にHeroku上でホストしました。
プロジェクト作成とモデル作成
Railsではプロジェクト作成を一行で行えるのでそのコマンドを使います。
rails new app_name_here --database=postgresql
次にモデルをscaffoldで作成します。RailsのscaffoldはいわゆるCRUDを一瞬で実装してくれます。
今回のプロジェクトでは曲についての小さなメモを残せるという機能を作るために、まず曲のモデルを作成します。(モデルを作成するというかscaffoldなので基本的な操作等もすべて作成されます)
rails g scaffold MusicTrack name:string
次に曲毎に保存するメモのモデルを作成します。
rails g scaffold TrackNote body:text music_track_id:integer user_id:integer
ここでmusic_track_idを作成する理由は曲のメモは必ずどれかしらの曲に属するからです。user_idに関しても同様でメモも必ずどれかのユーザーに属します。この関係は次の項目で記述します。
ユーザーログイン機能実装
その前にユーザーログインの機能を利用するためにRuby Gemのdeviseとbrcypt
をインストールします。
Gemfile内に
gem 'devise'
gem 'bcrypt'
と追加し以下のコマンドでインストールします。
bundle install
rails generate devise:install
すると、ユーザーモデルが作成されるので今度こそモデル同士の関係を記述していきます。
モデル同士の関係を記述する
それぞれのモデルのファイルに以下のように記述します。
class User < ApplicationRecord
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :validatable
has_many :track_notes
end
class TrackNote < ApplicationRecord
belongs_to :user
belongs_to :music_track
end
class MusicTrack < ApplicationRecord
has_many :track_notes
end
こうすることでUserオブジェクトにtrack_notesプロパティが追加され、簡単にそのユーザーに属するTrackNoteにアクセスできるようになります。(同様にMusicTrackにもtrack_notesプロパティが追加されます。)
ルーティングを記述する
Railsではroutes.rb
にルーティング情報を記述します。
Rails.application.routes.draw do
devise_for :users
resources :track_notes
resources :music_tracks
end
DB関係のコマンド
RailsでDBのテーブルを作成したりコラムを追加したりした後は必ず以下のコマンドを利用します。
(ただし初回のみは追加でrails db:create
を先に利用します。)
rails db:migrate
この時点でrails s
を使うとおそらくサーバー(ウェブとDB)が起動します。
今プロジェクトではアプリ全体をDockerコンテナ化したいので後々このコマンドは使わなくなります。コンテナ化するまでは上記のコマンドを使用します。
次の記事ではこのRailsアプリをDockerコンテナ化します。
Discussion