Ruby on Rails5 のレッスンに突入
Ruby on Rails5
さて、昨日はRubyの基礎を勉強しました。
引き続き今日はいよいよRuby on Rails5の学習に入っていきます。使う学習サイトは同じく Progate です。
- Progate | プログラミングの入門なら基礎から学べるProgate[プロゲート]
- 途中から有料です。月額980円(税込)
自分のメモ代わりに、重要なポイントとかをまとめて見ます。
履修するレッスン
- Ruby on Rails5
- 目標:TweetApp(TwiiterみたいなSNS)を作ること
今回はブラウザ上で全て完結出来るみたいなので、ローカルの環境作ったりはしないんですね…ちょっと残念。まあいいか。Progate上のRuby on Rails5のレッスン終わったらローカルで環境作ってアプリ作ってみようかな。
ワガママ言うと、背景が黒なのが目がチカチカしてキツい‥‥背景色変えられる機能欲しいです Progate さん……。背景が黒いとカーソルをよく見失うし……。プリーズ!
基礎
- railsのアプリ生成コマンド
$ rails new App名
- サーバ起動(ビルトインサーバかな?)
$ rails server
- Railsの初期画面可愛いなぁ
- トップページ生成コマンド。と思ったら、これはコントローラ作成コマンドで、デフォルトのアクションを一つ指定出来るというもののようです。ルーティングやメソッドやビューやassetsのJSまで作ってくれてる。
$ rails generate controller home top
↓ 省略Ver
$ rails g controller home top - Controllerのファイル名がスネークケースなのがだいぶ気持ち悪い…
- Viewのディレクトリの命名規則はCakePHPみたい。
コントローラと同じ名前のビューフォルダから、アクションと同じ名前のHTMLファイルを探してブラウザに返します。
なのにルーティングがいるのか…? - いるらしい。ルーティングに書かれていないとビューを表示出来ない。
- rails のCSSファイルは、
「stylesheets」フォルダの中に保存されているCSSファイルにコードを書けば、すべてのビューにCSSが適用されます。
と書かれているけど、これ、コントローラ名.cssは、そのコントローラに紐付いた全てのビューに適用されます、ってわけじゃないのかな…?
作成されたデフォルトのCSSにはコメントアウトで
// Place all the styles related to the posts controller here.
// They will automatically be included in application.css.と書かれているけど…。単純にファイル名を分かりやすく区別してるだけなのかな?あとで確認してみよ。
- ビューファイルの拡張子「erb」は「Embedded Ruby(埋め込みRuby)」の略
- この拡張子のビューファイルでは、<% %> で囲むとrubyコードが記述出来る。
- 変数を出力する場合は<%= %>を使う。これでechoしてくれるんですな
- コントローラからビューに値を渡すのは、
変数名を「@」から始めることでこの変数は特殊な変数となり、ビューファイルでも使用することができます
らしい。これは便利だ!わざわざ渡さなくていいんですね。ビュー側で使う場合も<% @posts.each do |posts| %>
になるらしい。 - フラッシュメッセージは flash[:notice] = "メッセージ"
- ビューで使う時も <%= flash[:notice] %>
ルーティング
- ルーティングの基本
Rails.application.routes.draw do
get "/" => "home#index"
get "/about" => "home#about"
get "/post/:id" => "post#show"
end - idなどのパラメータを指定する場合
「posts/:id」というルーティングは「posts/index」より下に書かなければいけません。ルーティングは合致するURLを上から順に探します。そのため「posts/index」よりも上に書くと、「localhost:3000/posts/index」というURLは「posts/:id」というルーティングに合致してしまいます。
あ、これあれですね、地味にハマるやつですね分かります… - link_to メソッドは get のルーティングを探す
- post のルーティングを探す場合はlink_toメソッドの第三引数に {method: "post"} を渡す必要がある→追記:のちに {method: :post} という書き方も出てきた
- Railsでのアクション命名規則
一覧:index
新規作成がLaravelと違うからちょっとごっちゃになりそう…
新規作成画面:new
新規作成実行:create
編集画面:edit
編集実行:update
詳細画面:show
削除:destroy
rails console
- rails console を使ってrubyのコマンドを使うことが出来る。へー。rails consoleの起動は
$ rails console
- 変数も使えて、quit するまで記憶される
- rails consoleからDBへレコード追加も出来る
post1 = Post.new(content: "コンテンツテキスト")
post1.save
フォーム
- form_tagメソッドはFormヘルパーみたいなものっぽい。定義の仕方は
<%= form_tag("/posts/create") do %>
<div class="form">
<div class="form-body">
<textarea name="content"></textarea>
<input type="submit" value="投稿">
</div>
</div>
<% end %>
DB
- モデルの生成。一緒にマイグレーションも生成してくれるらしい。
$ rails g model Post content:text
- Railsでのマイグレーションの性質
データベースに反映されていないマイグレーションファイルが存在する状態で、どこかのページにアクセスすると以下のようなマイグレーションエラーが発生してしまいます。そのため、マイグレーションファイルを作成した場合は必ず「rails db:migrate」を実行する必要があります。
- マイグレーションの実行。Laravel と一緒だー
$ rails db:migrate
- バリデーションはモデルに記述する
class Post < ApplicationRecord
おお、見慣れない感じ…
validates :content, {presence: true, length: {maximum: 140}}
end
Ruby on Rails5のレッスンを7つ修了
15レッスンということだったので5つずつ消化しようかと思ってたら、内4つは復習用のレッスンみたいだったので、キリがいい所まで進めました。なので今日は7つです。概ね4時間半程度かかりました。
DBを使った追加・表示・編集・削除までですかね。あとはレイアウトを使った表示の仕方。
思ったよりもLaravelに似てる感じがして、まだそれほど書き辛いとか難しいとかいうイメージは無いですね。いえ、あくまで「まだ」でしょうけども。
フレームワークってみんなこんな感じなんでしょうかね?フレームワーク3つ目なのでまだよく分かりません…。
でもバリデーションの書き方は、なんか、めんどくさそう間違えやすそう。
あと、ルーティングとアクションの命名規則が分かったのが良かったです。やっぱり郷に入れば郷に従えで、そのフレームワークらしい書き方ってあると思うので、倣うのが大事だと思うのですよね。
以前Laravel始めた当初に「CakePHPっぽい書き方しないでよ」と言われたことがありましたけど、今度はそうならないように・ω・
さて、あと1日で終わらせるか、2日に分けるか。早くローカル環境作りたいなー。