
Ruby on Rails 5アプリケーションプログラミング
- 作者: 山田祥寛
- 出版社/メーカー: 技術評論社
- 発売日: 2017/04/14
- メディア: 大型本
- この商品を含むブログを見る
序文
「Ruby on Rails 5 アプリケーションプログラミング」学習4日目。
私事ですが昨日は□□□(クチロロ)という変なバンドのLiveに行ってきました。楽しかったです。
GitHub
客観的成果
(学習時間:4時間)
コード実装部分
↓/railbook/config/my_config.yml
# アプリ固有の設定情報はconfigフォルダ下に # 自分で.ymlファイルを作る # YAML.load(File.read("#{Rails.root}/config/my_config.yml"))[Rails.env] # みたいな書き方で呼び出す COMMON: &COMMON author: 'Yuji Koyama' hatena_blog: title: 'カロリーメイトください' url: 'http://yjkym.hatenablog.com/' development: <<: *COMMON test: <<: *COMMON production: <<: *COMMON
↓/config/initializers/my_config.rb
# 設定ファイルを読み込む # YAML.loadで読み込んだymlファイルの情報から # 現在の開発環境に設定しているものを読み込み、 # グローバル変数に代入している MY_APP = YAML.load(File.read("#{Rails.root}/config/my_config.yml"))[Rails.env]
↓/app/controllers/yahoo_controller.rb
# コントローラークラスはすべてApplicationControllerクラスを継承する class YahooController < ApplicationController # 省略 def hatena # config\initializers\my_config.rb # でアプリ固有の設定情報をMY_APPに読み込んでいる render plain: MY_APP['hatena_blog']['title'] + ':' + MY_APP['hatena_blog']['url'] end end
↓/config/routes.rb
# ルーティング設定を指定する Rails.application.routes.draw do # resoucesメソッドで以下のようなルーティングが設定される # :formatが省略された場合はhtmlとみなされる # GET /cds(.:format) cds#index # POST /cds(.:format) cds#create # GET /cds/new(.:format) cds#new # GET /cds/:id/edit(.:format) cds#edit # GET /cds/:id(.:format) cds#show # PATCH /cds/:id(.:format) cds#update # PUT /cds/:id(.:format) cds#update # DELETE /cds/:id(.:format) cds#destroy resources :cds # For details on the DSL available within this file, see http://guides.rubyonrails.org/routing.html # 'yahoo/index' というURLが要求(GET)されたら # 'yahoo'コントローラーの'index'アクションを呼び出す # 'hoge/page'など無関係なURLを割り当てることも可 get 'yahoo/index', to: 'yahoo#index' # to: を省略した書き方 get 'yahoo/view' # get 'yahoo/view', to: 'yahoo#view'と同等 get 'yahoo/list' get 'yahoo/hatena' end
↓/app/views/cds/index.html.erb
<%# .html.erb はERB(embedded Ruby)を用いて %> <%# HTML形式の出力を生成するテンプレートという意味 %> <p id="notice"><%= notice %></p> <h1>Cds</h1> <table> <thead> <tr> <th>Jan</th> <th>Title</th> <th>Price</th> <th>Artist</th> <th>Released</th> <th>Is major</th> <th colspan="3"></th> </tr> </thead> <tbody> <% @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> <%# link_toメソッド(ビューヘルパー)の単純な使い方 %> <%# Rubyではメソッド呼び出しの括弧を省略できることに注意 %> <%# <%=link_to 'カロリーメイトください', 'http://yjkym.hatenablog.com/', class: 'hoge', title:'page' %_>(アンダーバー不要) %> <%# ↓出力されるHTML %> <%# <a class="hoge" title="page" href="http://yjkym.hatenablog.com/">カロリーメイトください</a> %> <%# link_toメソッドの第二引数にオブジェクトが渡されると %> <%# 引数のオブジェクトはキー値を表し %> <%# 現在のパスにオブジェクトのキー値を加えた %> <%# パスが生成される %> <%# ↓出力されるHTML %> <%# <a href="/cds/51848956">Show</a> %> <td><%= link_to 'Show', cd %></td> <%# edit_cd_pathもビューヘルパーで %> <%# 引数にidを渡すことで %> <%# /cds/:id/editというパスを返す %> <%# 引数のcdはやはりオブジェクトのキー値を表している %> <%# ↓出力されるHTML %> <%# <a href="/cds/51848956/edit">Edit</a> %> <td><%= link_to 'Edit', edit_cd_path(cd) %></td> <%# link_toメソッドにdata-confirmオプションを指定すると %> <%# クリック時に確認ダイアログを表示する %> <%# またmethodオプションを指定することで %> <%# GET以外のHTTPメソッドを利用できる %> <%# ただし内部的には(一般的なブラウザに対応するため) %> <%# POSTメソッドで通信が行われている %> <%# 前置のコロン(:delete)はRubyのシンボルを表し、 %> <%# 「データとして利用されない文字列」を表す? %> <%# 「列挙されてない列挙体」というイメージでいる %> <%# ↓出力されるHTML %> <%# <a data-confirm="Are you sure?" rel="nofollow" data-method="delete" href="/cds/980190962">Destroy</a> %> <%# no-follow属性はどのタイミングでついたのかな %> <%# method: :deleteを指定したタイミングだろうか %> <td><%= link_to 'Destroy', cd, method: :delete, data: { confirm: 'Are you sure?' } %></td> </tr> <% end %> </tbody> </table> <br> <%# new_cd_pathもビューヘルパーで %> <%# /cds/newというパスを返す %> <%# ↓出力されるHTML %> <%# <a href="/cds/new">New Cd</a> %> <%= link_to 'New Cd', new_cd_path %>
実行結果
感想
今日はアプリ固有の設定情報の設定方法と、scaffoldコマンドの使い方、scaffoldで生成されたindex関連のファイルの読み方について。
一応、通った道ではあるけど、理解できていないことも多くておもしろかった。
Rubyで前置のコロンがシンボルを設定しているということを初めて理解した。
記号関連の意味って調べにくいんだよねぇ。
カロリーメイトください。
おまけ1(モデル関連の命名規則)
種類 | 概要 | 例 |
---|---|---|
モデルクラス | アッパーキャメルケース | Cd |
モデルクラスのファイル名 | スネークケース・単数 | cd.rb |
テーブル名 | スネークケース・複数 | cds |
テストスクリプト名 | スネークケース+'_test' | cd_test.rb |
おまけ2(resourcesメソッドで生成されるルーティング情報)
URLパターン | HTTPメソッド | 呼び出すアクション | 例 |
---|---|---|---|
/cds(.:format) | GET | index | /cds.html |
/cds/:id(.:format) | GET | show | /cds/123456.html |
/cds/new(.:format) | GET | new | /cds/new.html |
/cds(.:format) | POST | create | /cds.html |
/cds/:id/edit(.:format) | POST | edit | /cds/123456/edit.html |
/cds/:id(.:format) | PATCH or PUT | update | /cds/123456.html |
/cds/:id(.:format) | DELETE | destroy | /cds/123456.html |
':id'はURLからidパラメータとして与えられた値、
'.:format'は.(ドット)+URLの拡張子を表す。省略可。
BGM
絶対零度 / 集団行動 www.youtube.com