Ruby on Rails 使い方まとめ

初心者向けにRuby on Rails の使い方をまとめてみます。




はじめに

Cloud9に環境を作っておくのがおすすめです。
Cloud9だと簡単に試せて、失敗してもコピーしたり、削除が簡単です。

参照
https://www.kazaana-akero.com/2017/10/01/cloud9%E7%92%B0%E5%A2%83%E3%81%A7ruby-on-rails%E3%81%AE%E9%96%8B%E7%99%BA%E3%82%92%E3%81%99%E3%82%8B/





Rails アプリケーションの作成

アプリ用フォルダ、ファイルをコマンド1つで作成。

rails new アプリ名

サーバー起動

サーバーを起動するとURLにアクセスして初期画面が表示される。

rails server
cloud9の場合

cloud9でコマンドで起動する場合はこちら。
アプリの階層に移動してから実行しないと、rails コマンド入力しても Usage:~~~~~が表示されてしまう。

rails s -b $IP -p $PORT

Runボタンを右クリックして「New Run Configuration」にRuby on Railsを追加しておくと便利です。

参照:https://www.kazaana-akero.com/2017/10/01/cloud9%E7%92%B0%E5%A2%83%E3%81%A7ruby-on-rails%E3%81%AE%E9%96%8B%E7%99%BA%E3%82%92%E3%81%99%E3%82%8B/



開発でよく使う階層

・app/assets
・app/controllers
・app/views
・config/routes.rb
・db/migrate
・public/
 画像など配置
・Gemfile
 gemの追加(拡張機能


アプリケーションに必要なMVC

・コントローラー(Controller)
 ・ルーティングから呼び出すアクションを作成する。
 ・変数の定義やデータ変更処理など
・ビュー(View)
 ・HTML、CSSでページを作成
 ・コントローラーから受け取った値を表示するなど。
・DB操作(Model)


ページの作成

ページ表示の仕組み

ページにアクセス
 ↓
ルーティングを確認
 ↓
コントローラーの該当処理を呼び出す
 ↓
ビューにコントローラーの結果を返す

ページの追加でやること

・ビュー:○○○○○.html.erbをviewフォルダ内に作成
・コントローラーにルーティングから呼び出すアクションを追加
・routes.rbに新規ページのルーティングを追加


コントローラーとビューの作成

rails generate controller コントローラー名 アクション名

例)
rails generate controller home top

このコマンドによって
・ビューファイル「app/view/home/top.html.erb」ができる。
・コントローラー「app/controller/home_controller.rb」ができる。

変数

・アクションで定義した変数はビューでは使用不可
 ※@が先頭にある変数はビューでも使用可能
・sessionの指定方法

session[:キー名]

ルーティングの編集

アクセスされたURLからコントローラのどのアクションを呼び出すか決めるとこ。
・config/routes.rbに設定する。
・get、postで役割が異なる。
 ・get:DBを変更しないアクションを呼び出す。
 ・post:DBやsessionを変更するアクションを呼び出す。

get "home/top" => "home#top"

"ドメイン/home/top" にアクセスされたら
=>
homeコントローラーのtopアクションを呼び出す。

get "post/:id" => "posts#show"

ドメイン/post/:○○ にアクセスされたら、showアクションを呼び出す。
・:○○はなんでもOK。
・指定された○○は、params[:id]で取り出せる。
※post/:idのルーティングは、post/indexより下に記述する。
(ルーティングは、ファイルの上から合致するか検索しているため)


post "posts/create" => "posts#create"

・フォームから値を受け取る時は、getではなくpost。
・こんな感じでフォームを挟む。

 <%= form_tag("posts/create") do %>
  # HTMLでformを記述
 <% end %>

・フォーム内のsubmitボタン押したらデータ送信される。
・フォームのname属性に指定した文字列でデータを受け取る。

 params[:hoge]で受け取るとき
 <textarea name="hoge">初期値など</textarea>

データベースの使い方

テーブルの新規作成

テーブルの作成内容を準備
rails g model Post content:text

・postsテーブルの作成(マイグレーションファイルは単数形(Post)にしてを生成する)
・DBへの変更内容を記述したファイルが生成される。(マイグレーションファイル)
 ・db/migrate/○○○○_create_posts.rb
・content:text は、contentというtext型のカラムを生成するということ
・テーブル操作用のモデルが生成される。
 ・app/models/post.rb

変更内容を反映する
rails db:migrate

マイグレーションファイルからDBへ変更内容の反映
・ファイルを生成したら必ず実行が必要(実行せずにページへアクセスするとエラーが発生する)



DB変更

rails g migration ファイル名

・作成されたマイグレーションファイルを編集して、rails db:migrateで反映する。

def change
  #変更内容を追記
  add_column :テーブル名, :カラム名, :データ型
end

マイグレーションされたか確認

rake db:migrate:status

up:反映済
down:未反映。不要ならマイグレーションファイルを削除可能。


データベースのデータを使う

post = Post.new(content: "○○○○○")
#作成したテーブル:Post(モデル)を使って、インスタンス:post を生成する。
#カラム:contentの値="○○○○○"

post.all
#テーブル:post の値をすべて取得
#post.all[0].content という感じで値を取得することも可能

post.first
#テーブル:post の最初の値をすべて取得

post.find_by(id: ***)
#id=***に一致する値を返す

post.save
#if文を使って保存できたかどうかで処理を分けたりする。
#postテーブルへの保存が失敗した時にpost.errors.full_messagesにメッセージが入る。
#eachを使って全て表示するといい。

post.all.order(id: :desc)
#降順に並べ替え

post.destroy
#削除

共通レイアウト

・views/layouts/application.html.erb を編集する。
・<%= yield %>には各ビューファイルの内容が入る。


必要に応じて使う

リンクなど

link_to("表示テキスト","リンク先")
#<a href="リンク先">表示テキスト</a>に変換される。

link_to("表示テキスト","リンク先",{method: "post"})
#ルーティングのpostを検索

redirect_to("リンク先")
#DBへの変更処理の後に、一覧ページを表示するといった処理などで使用する。

render("posts/new")
#newアクションを経由せずに、new.html.erbを表示。

バリデーション

・model/○○○○○.rb に記述する。

#validates :検証するカラム名, {検証する内容}
#空での保存を禁止する
validates :content, {presence: true}

flashメッセージ

flash[:notice] = "○○○○○"
#アプリ共通で使うので、application.html.erb内に記述すると良い。
<%= flash[:notice] %>
<!-- htmlにはこんな感じで書く -->

コマンドラインで簡単な確認をする

rails console