個人的リマインド用
参考
はじめてのRuby on Rails入門-RubyとRailsを基礎から学びウェブアプリケーションをネットに公開しよう
環境構築
Rubyバージョン管理
クラウド9ではrbenvではなくRVMを使う
rvm -v バージョン確認
rvm list 使えるRubyバージョンの確認
rvm get stable rvmをアップグレード
rvm install ruby-[指定バージョン] rubyをバージョン指定でインストール
rvm use [指定バージョン] Rubyバージョン切り替え
rvm --default use 3.0.2 指定バージョンをデフォルトにする
Rails環境構築
基礎用語
・bundler→RubyGemsを管理するもの
・RubyGems→Rubyのパッケージ管理ソフト
rails -v railsのバージョン確認
gem -v gemのバージョン確認
gem install rails -v [指定バージョン] -N
-v以降なしだと最新バージョンをインストール、-Nはドキュメントをインストールしないオプション
Rails入門
Railsの超初歩
Railsの基本理念
設定より規約
例えば、データベースのテーブル名はモデルの複数形にする(User→users)など
規約に乗ることで、よりサービスの本質的なとこに注力できるようになる
DRY(Don't Repeat Yourselef)
同じことを繰り返さない(重複したコードを1箇所にまとめる)
MVCアーキテクチャ
Model
データベースアクセスなどデータ関連処理
View
画面表示
Controller
リクエストやレスポンスを制御
ViewとModelの橋渡し
役割ごとに分けてかくことで、プログラム全体の見通しがよくなり、メンテナンス性が高まる。
Hello world出力まで
新規のRailsプロジェクトを作る
rails [_Railsバージョン_] new [プロジェクト名]
例:rails _7.0.0_ new hello バージョンは指定する場合のみ
サーバー立ち上げ
rails s(server)
サーバーを立ち上げても変な画面
Railsではセキュリティ上の理由からホワイトリストに登録されていないホストでアクセスした場合に、ブロックされてしまう。
ホワイトリストをクリア
config → environments → development.rbの一番下に
config.hosts.clear てな感じで書くと大丈夫
Controllerを作成
Controllerを作るにはrails generateが必要
ディレクトリが現在のプロジェクトであることを確認
rails g controller [コントローラーにつける名前] [定義するメソッド、アクションの名前]
例:rails g controller users index
※コントローラーにつける名前は複数形にすることが普通だが、homeコントローラーとかinfoコントローラーとか
データベースと直接結びつかない場合は単数形にする場合もある
以上のコマンドでいろいろファイルができるが必要なところを見ていく
・app/controllers/users_controller.rb
(中を見てみるとUsersControllerはApplicationControllerを継承している)
コントローラーはアプリケーションに対する特定のリクエストを受け取って処理する役割がある
今回の場合indexメソッドがある。これはクライアントからのリクエストに対して具体的な処理を実行するためのメソッド。
上記メソッドの中にHello worldを出力する内容を書く
def index
render plain: 'Hello world'
end
renderメソッドは、ブラウザで表示するコンテンツのレンダリングを行うメソッド
plainオプションを使用すると、平文のテキストをブラウザに表示できる
開いてるサーバーのURLを
~/users/indexにするとHello worldが表示される
ルーティングの変更
ルーティングとはURLとアクションを結びつける設定のこと
アクションとURLの対応を確認する
rails routes
routesを見てみると情報が4行ある
・Prefix→リンクを設置するときなどにパスを指定する時に使う
・Verb→GET,POST,DELETEなどのメソッド名が記載
・URI Pattern→アドレス
・Controller#Action→users#index(コントローラー名#アクションが実行されるということ)
config/routes.rbファイルに記述してルーティングを設定
Rails.application.routes.draw do
get 'users/index' #userコントローラーのindexアクションを実行しろという意味
end
上記のものはrails gで自動的に記述される
また
get 'users/index', to 'users#index'の省略形
'users', to 'users#index'にするとリンクが~/usersになる
Viewの利用
現状はControllerにViewの機能を持たせている変な状態
app/views/users/index.html.erbができている
erbはHTML内にRubyを埋め込める(Rubyの標準ライブラリ)
規約
例:
app/views/users/index.html.erb
ルール:
app/views/コントローラー名/アクション名.html.erb
こういったのを勝手にやってくれる
erbにRubyの処理を埋め込む
<p><%= 10 + 1 %></p>
=をつけることで画面に表示される
コントローラーからviewに渡す
HTMLないでの計算は好ましくない
users_controllerにて
def index
@num = 10 + 1
end
@numをviewで書く
modelの作成
例題→ユーザーを管理するUserモデルを作成(nameとageを持つ)
modelの作成
rails g model [モデル名] [データ構造]
例: rails g model User name:string age:integer
※model名は単数形
・db/migrate/(timestamp)~~~
これはマイグレイションファイルと呼ばれるもの
・models/user.rb
モデルクラスを定義するファイル
migrationの実行
rails db:migrate
データベース構造の確認
rails console
データベースをコマンドで操作できるモードに(標準はsqlite)←画面が変な感じ
困った時は.quitで抜けよう
.tables テーブルの確認、左2つはRubyの標準のもの
.schema users 構造確認
データベースの操作
rails c(console)
User.all ← SELECT * FROM 'users'
データの挿入方法
user = User.new インスタンスの作成
user.name = '~~'
user.age = ~~
user.save 最後に保存を忘れずに
1行ですませる
lucas = User.new(name: 'Lucas', age: 24)
lucas.save
idを指定してデータを取得
User.find(id)
値のupdate
yamada = User.find(id) 変数に保存
yamada.name = '~~'
yamada.age = ~~
yamada.save
削除
yamada = User.find(id) 変数に保存
yamada.destroy
1行ですませる
User.find(1).destroy
データベースの値をWebページに表示
uesrs.controllerにて
def index
@users = User.all インスタンス変数に保存
end
現在3つのデータが入っているとする
eachで取り出す
<ul>
<% @users.each do |user| %>
<li>
<%= user.id %>, <%= user.name %>, <%= user.age %>
</li>
<% end %>
</ul>