『Ruby on Rails 5 アプリケーションプログラミング』を学習する3

Ruby on Rails 5アプリケーションプログラミング

Ruby on Rails 5アプリケーションプログラミング

序文

Ruby on Rails 5 アプリケーションプログラミング」学習3日目。
珍しく午後から外出するのでさらっと。

GitHub

github.com

客観的成果

  • 第2章
    • 2.4 モデルの基本

(学習時間:2時間)

コード実装部分

↓/config/database.yml

# SQLite version 3.x
#   gem install sqlite3
#
#   Ensure the SQLite 3 gem is defined in your Gemfile
#   gem 'sqlite3'
#

# エイリアス(&{エイリアス名})の指定
# defaultというクラス、あるいは変数を作ってる感じ
default: &default
  # 接続するデータベースの種類
  adapter: sqlite3
  # 確保する接続プール
  # (データベースへの接続をあらかじめ準備しておき、
  #  また利用の都度、切断せずに再利用する仕組み)
  pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
  # 接続のタイムアウト時間
  timeout: 5000

# 開発環境の設定
development:
  # 上で設定したエイリアスを挿入する
  # <<: *{エイリアス名}
  <<: *default
  # データベース名(データベースファイル名)
  database: db/development.sqlite3
  # ↓と指定するのと同等
  # adapter: sqlite3
  # pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
  # timeout: 5000
  # database: db/development.sqlite3

# Warning: The database defined as "test" will be erased and
# re-generated from your development database when you run "rake".
# Do not set this db to the same as development or production.
test:
  <<: *default
  database: db/test.sqlite3

production:
  <<: *default
  database: db/production.sqlite3

↓/test/fixtures/cds.yml

# Read about fixtures at http://api.rubyonrails.org/classes/ActiveRecord/FixtureSet.html

# フィクスチャによるテストデータの準備
# (テストデータをデータベースに流し込むための仕組み)
# rails db:fixtures:load FIXTURES=cds
# みたいなコマンドでテーブルにテストデータが展開される

# 指定したフィールド以外に
# id(主キー),created_at(作成日時),
# updated_at(更新日時)フィールドが自動生成される

one:
  jan: 4526180405252
  title: 星眠る島
  price: 1600
  artist: 宇宙団
  released: 2017-01-11
  is_major: false

# 省略

six:
  jan: 4988002756452
  title: 充分未来
  price: 2000
  artist: 集団行動
  released: 2018-02-07
  is_major: true

↓/app/controllers/yahoo_controller.rb

class YahooController < ApplicationController

  # 省略

  def list
    # Cdオブジェクトのallメソッド呼び出し
    # Rubyでは引数なしの関数呼び出しを示す()は不要
    # (あってもいい)
    # 返り値はCdオブジェクトの配列
    @cds = Cd.all
    # 発行されるSQL
    # SELECT "cds".* FROM "cds"

    # Rubyで外部からアクセスできるのは
    # 基本的にメソッドだけ?
    # インスタンス変数とかは多分
    # ゲッターメソッドで呼び出す。多分
  end
end

↓app/views/yahoo/list.html.erb

<table>
  <tr>
    <th>JANコード</th>
    <th>タイトル</th>
    <th>価格</th>
    <th>アーティスト</th>
    <th>リリース日</th>
    <th>メジャーレーベル?</th>
  </tr>
<%# Ruby構文をそのまま埋め込める %>
<% @cds.each do |cd| %>
  <tr>
    <td><%= cd.jan %></td>
    <td><%= cd.title %></td>
    <td><%= cd.price %></td>
    <td><%= cd.artist %></td>
    <td><%= cd.released %></td>
    <td><%= cd.is_major %></td>
  </tr>
<% end %>

</table>

↓/config/routes.rb

# ルーティング設定を指定する
Rails.application.routes.draw do

  # 省略

  get 'yahoo/list'
end

実行結果

localhost:3000/yahoo/list f:id:yjkym:20180326115726p:plain

感想

今日は意外と知らなかったことが出てきた。
テストデータの流し込み方とか、YAMLの構造とか。
Qiitaとかに載ってる情報って、最短で目的を達成するための情報ばっかりなので、根本的なところから丁寧に説明してもらえるのはありがたい。
某予備校も見習ってほしいものである。
ま某予備校も最初は持ち上げていたんだけど。
なんとなくで使ってるRubyも少しずつ覚えていこう。
カロリーメイトください。

BGM

Good So Good / □□□ www.youtube.com