以前にRuby on Railsを学んだ際のメモをそのまま載せます。 メモ書きなのであまり纏まってないと思います。
多分題材はドットインストールかな?
Railsサーバの起動と停止
- 起動:
rails server -b {IPアドレス} -d- 事前にマシンのIPを調べておく →
$ ip aor$ ifconfig
- 事前にマシンのIPを調べておく →
- 停止:
cat tmp/pids/server.pid | xargs kill -9- サーバのプロセスIDは
server.pidに記録される - パイプラインで引き渡してkillコマンドで停止する
- サーバのプロセスIDは
scaffoldコマンド
- スタートアップコマンド(テンプレートを用意してくれる)
- scaffold:足場をつくる
- コマンド
$ rails g scaffold {api name} [name1:type1, name2:type2, …]- 型は
title:stringのように{カラム名}:{型}の順で指定
- scaffoldしたら以下のコマンドでDB設定
$ rails db:migrade
- 詳細は以下のサイトを参考
Modelの作成
rails g model [model name]で作成- モデルをテーブルへ反映させる
db:migrate- モデル作成した後とかに自動でDBへテーブル作成をおこなったりする
db:migrate:reset- 全てのテーブルのtruncate tableみたいな感じ
db:seed- seeds.rbに書いたコードでデータベースへデータを格納できる
consoleコマンド
- irbを起動する
- 対話型
- 特定のテーブルへのデータ追加とかできる
$ irb > p = [model name].new(name1:type1, name2:type2…)- newの時は
irb> p. saveが必要
- newの時は
$ irb > [model name].create(name1:type1, name2:type2...)- データのInsert
Contorllerのルーティング
rails g controller [controller name]でControllerの作成/config/routes.rbにてルーティングresource :[controller name]
$ rails routesにてアプリケーションでのルーティングを確認出来る
Viewの記述
Rootパスの設定
/config/routes.rbにて設定root '[Controller#Action]'
- Convention over Configuration
- Ruby on Railsは設定を設定ファイルに記述するのではなく、命名規則などの規約に基づいて設定が自動でなされる
Application全体のレイアウト
app/views/layouts/application.html.erbにて(WebFormsで言う)マスターページが用意されている- 作成したViewは
<%= yield %>にバインドされる
CSS/JSファイル
app/assets/stylesheet、app/assets/javascriptに対応するファイルが生成される
link_toヘルパー
- TextとPathを渡してLinkButton化する
- 例:
<%= link_to post.title, post_path(post) %>
- 例:
image_tagヘルパー
- FileNameとCssClassを渡して画像を表示する
- 例:
<%= image_tag ‘header.png', class: 'header' %>
- 例:
- 画像は
app/asset/image/のなかへ保存する
form_forヘルパー
- フォームタグの生成
- 例:
<%= form_for :post, url: posts_path do |f| %>f.text_field,f.text_areaのようにHtmlヘルパを使ってフォームを形成出来るf.submitでsubmitボタンを生成出来る
- 例:
StrongParameters(requireメソッドとpermitメソッド)
- RailsではPOSTされたデータをそのままDBへ格納することは許されていない
- ForbiddenAttributesError: 検証未チェックエラーの発生
require(:post).permit(:title, :body)で検証- 「
paramsが:postというキーを持ち、params[:post]は:title, :bodyというキーを持っているハッシュであること」と言う検証をおこなう(この形式のPOST以外はDBへ書き込まない)
- 「
データのバリデーションチェック
- Modelsに記入
app/models/post.rb※対象のModelクラス
- validatesヘルパーで検証
- 例1:
presence: true→ 空入力の禁止 - 例2:
length { minimum: 3 }→ 3文字以上message: 'メッセージ内容’と続けるとエラーメッセージをカスタマイズ出来る
- 例1:
エラー表示
- 例:
<% if @post.errors.messages[:title].any? %>- エラー内容はモデルにerrorsというプロパティが用意されている
データの更新
- 例:
@post.update(post_params)- 渡ってきたパラメータで更新する
- 更新できたかどうかは戻り値で確認
文字列の最適化
- simple_formatメソッド
- 文字列に含まれる改行を
<br/>に変換したり、<p>で文字列を囲ったりする
- 文字列に含まれる改行を
Viewの共通化
- 共通部品は
_form.html.erbのようにアンダースコアから始める - 似たようなフォームを共通化する際は必ず
routes.rbへresources: [model name]を記載する- 各フォームで渡されるべき
form_forの引数はRailsが自動で渡してくれる
- 各フォームで渡されるべき
- 共通部品は
render ‘[view name]’で呼び出す
削除リクエストの実行
- 例:
<%= link_to '[x]', post_path(post), method: 'delete', data: { confirm: 'Sure?' }, class: 'command' %>- ルーティングはpost_pathだけどGETメソッドと同じなため、明示的に
method: ‘delete'をつける data: { confirm: 'Sure?' }をつけることで削除リクエスト実行前に確認ダイアログを表示できる
- ルーティングはpost_pathだけどGETメソッドと同じなため、明示的に
モデルの参照
- モデル同士での外部参照をおこなうには
references型を使う- 例:
rails g model Comment body:string post:references - モデル生成すると
belongs_to :postという紐付けの設定がされている
- 例:
- モデルの生成をおこなったら外部参照される側のモデルにも設定が必要
- 例:
has_many :comments - postに対してcommentが複数の場合なので
has_manyを使用する
- 例:
ルーティングの限定
- 使用するモデルによっては使われるルーティングが限られている場合がある
- そのため、限定しておくことで無駄なルーティングを減らす
- 例:
resource :comments, only: [:create, :destroy] - “only: “オプションを使用することで使用するルーティングを限定する
- 例:
親モデルと子モデルの削除時オプション
- dependent:オプションの使用により親モデルが削除された場合の参照されている子モデルの扱いを設定する
- 例:
has_many :comments, dependent: :destroy dependent: :destroyによって親モデルが削除されたら子モデルも削除されるようになる
- 例: