さんさろ

さんさろ

プロダクトエンジニアの雑記&技術、たまにドイツ

Ruby on Rails5 のレッスンに突入

Ruby on Rails5

さて、昨日はRubyの基礎を勉強しました。

binthec.hatenablog.com

引き続き今日はいよいよRuby on Rails5の学習に入っていきます。使う学習サイトは同じく Progate です。

自分のメモ代わりに、重要なポイントとかをまとめて見ます。

 

履修するレッスン

  • 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ファイルを探してブラウザに返します。
    なのにルーティングがいるのか…?
  • いるらしい。ルーティングに書かれていないとビューを表示出来ない。
  • railsCSSファイルは、
    「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
    新規作成画面:new
    新規作成実行:create
    編集画面:edit
    編集実行:update
    詳細画面:show
    削除:destroy
    新規作成がLaravelと違うからちょっとごっちゃになりそう…

 

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

 

Ruby on Rails5のレッスンを7つ修了

15レッスンということだったので5つずつ消化しようかと思ってたら、内4つは復習用のレッスンみたいだったので、キリがいい所まで進めました。なので今日は7つです。概ね4時間半程度かかりました。

DBを使った追加・表示・編集・削除までですかね。あとはレイアウトを使った表示の仕方。

思ったよりもLaravelに似てる感じがして、まだそれほど書き辛いとか難しいとかいうイメージは無いですね。いえ、あくまで「まだ」でしょうけども。

フレームワークってみんなこんな感じなんでしょうかね?フレームワーク3つ目なのでまだよく分かりません…。

でもバリデーションの書き方は、なんか、めんどくさそう間違えやすそう。

あと、ルーティングとアクションの命名規則が分かったのが良かったです。やっぱり郷に入れば郷に従えで、そのフレームワークらしい書き方ってあると思うので、倣うのが大事だと思うのですよね。

以前Laravel始めた当初に「CakePHPっぽい書き方しないでよ」と言われたことがありましたけど、今度はそうならないように・ω・

さて、あと1日で終わらせるか、2日に分けるか。早くローカル環境作りたいなー。