Ruby
HTML
CSS
RubyOnRails
未経験エンジニア

【No.2】初めてのRuby on Rails Tutorial!

はじめに

今回も前回に引き続きチュートリアルをやってみて勉強したこと、初めて知ったことに絞って書いていこうと思います。今回は3、4章、このペースだと7回分も費やしてしまうからそろそろ3章分くらいは書きたい。

本編

第3章 ほぼ静的なページの作成

  • コントローラの作成時のコマンド(作成したものを元に戻したい時) $ rails generate(destroy) controller [コントローラ名] [アクション名(いくつでも可、なしでも可)]

ちなみにrailsコマンドは省略が可能で、一覧は以下になります。(テストも省略できることにびっくり!)
alt

  • ルーティングの設定
config/routes.rb
Rails.application.routes.draw do
 get  'static_pages/home'
 get  'static_pages/help'
 root 'application#hello'
end

ここで注目したいのがシングルクォーテーション('')で括られた中身で、左側がコントローラを指定し、右側がそのコントローラのアクションを指定しています。getというのはGETリクエストといって HTTPリクエストが対応しているメソッドのひとつみたいですね。

  • 少しだけ動的なページ(タイトルの追加)
home.html.erb
<!DOCTYPE html>
<html>
  <head>
    <title>Home | Ruby on Rails Tutorial Sample App</title>
  </head>
  <body>
    <h1>Sample App</h1>
    <p>
      This is the home page for the
      <a href="https://railstutorial.jp/">Ruby on Rails Tutorial</a>
      sample application.
    </p>
  </body>
</html>

これが最初のビューファイルみたいなんですが、タイトルタグで括ってあるところがタイトルになるようにできています。しかし、これではコード長くなり冗長ということで書き換えたのが以下、

home.html.erb
<% provide(:title, "Home") %>
<!DOCTYPE html>
<html>
  <head>
    <title><%= yield(:title) %> | Ruby on Rails Tutorial Sample App</title>
・・(以下省略)

というようにHome,About,Helpで共通している要素をprovideというメソッドを使ってページごとに編集します。

<%= yield(:title) %>

また、yieldを使うことで、ここではtitleタグを出力することができます。

第4章 Rails風味のRuby

まずRubyには非常に便利で多くのメソッドが用意されています。それらは、チュートリアル上でも出てくるよにコンソールを使用する際にもかなり有力なものになっています。この章では、ほとんどがコンソールでの話になっています。全然コンソールを使いこなせていなかった筆者にはめっちゃいい練習。。。

Rubyのメソッド

  • - 文字列
$ rails console
>> ""         # 空の文字列
=> ""
>> "foo"      # 空ではない文字列
=> "foo"
>> "foo" + "bar"    # 文字列の結合
=> "foobar"
>> first_name = "Michael"    # 変数の代入
=> "Michael"
>> "#{first_name} Hartl"     # 文字列の式展開
=> "Michael Hartl"
  • メソッド
>> def string_message(str = '')
>>   if str.empty?
>>     "It's an empty string!"
>>   else
>>     "The string is nonempty."
>>   end
>> end
=> :string_message
>> puts string_message("foobar")
The string is nonempty.
>> puts string_message("")
It's an empty string!
>> puts string_message
It's an empty string!

データ構造のあれこれ

  • ハッシュ
>>  "foo bar     baz".split     # splitメソッドで文字列を3つの要素を持つ配列に分割
=> ["foo", "bar", "baz"]

>> a = [42, 8, 17]
=> [42, 8, 17]
>> a[0]               # Rubyでは角カッコで配列にアクセスする
=> 42
>> a[2]
=> 8
>> a[-1]              # 配列の添字はマイナスにもなれる!
=> 17

>> x = a.length       # 配列も文字列と同様lengthメソッドに応答する
=> 3                  # length以外にもempty?やshuffleなどのたくさんのメソッドが存在

>> 0..9
=> 0..9
>> (0..9).to_a            # 丸カッコで範囲オブジェクトに対しto_aを呼びだす
=> [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]       # 文字列にも対応(例:(a..x)とか)
  • ブロック
>> (1..5).each { |i| puts 2 * i }   # 波カッコ内はdoとendで囲んで示すことも
2
4
6
8
10
=> 1..5
  •  シンボル
>> user = {}                          # {}は空のハッシュ
=> {}
>> user["first_name"] = "Michael"     # キーが "first_name" で値が "Michael"
=> "Michael"
>> user["last_name"] = "Hartl"        # キーが "last_name" で値が "Hartl"
=> "Hartl"
>> user["first_name"]                 # 要素へのアクセスは配列の場合と似ている
=> "Michael"
>> user                               # ハッシュのリテラル表記
=> {"last_name"=>"Hartl", "first_name"=>"Michael"}

class

そして、クラスもコンソールで確認できる。

>> s = String.new("foobar")   # 文字列の名前付き(ダブルクォートは文字列のコンストラクタだったらしい) 
=> "foobar"
>> s.class
=> String
>> s == "foobar"
=> true

クラスの継承に関しては図を見たらかなり分かり易かった。

alt

おわりに

いつも以上にまとまりのない回になってしまいましたが、これ4章まで終わり。いい加減スピード上げてやろうかな。。。ちなみに今はまた新しい開発に携わらせていて、今がフロントよりを担当しているので早くルーティングとかコントローラとか触りたくてウズウズしてます。
最後まで見てくださりありがとうございました。