器用貧乏です。はげたかです。日記です。

どうも、はげたかです。今まで器用貧乏に生きてきました。ジェネラリスト・フルスタックエンジニアを目指しています。

今日の一言:カテゴリ分けをしっかりしたらPVあがるかな?

Rails チュートリアル 3-4章まとめ

はじめに

Rails チュートリアルの3-4章を簡単にまとめてみた。 少しまとめ方が適当すぎるが、自分の備忘録として残しておく。

文章の書き方・まとめ方・要約方法・勉強日記の書き方等も学んだほうが良いよなぁ。。。 後は、自分で規則を作るとか。

どれがコマンドなのか分からなかったりするからね。考えものですな。

今日は眠いから適当で。おやすみなさい! (予約投稿にしときます。)

Rails チュートリアル 3-4章まとめ

rails のアプリケーションを作る

rails new sample_app

Railsで sample_app が作成される。

Gemfile をインストールする

sudo bundle install

  • Gemfile って?

必要なgemを書いていくもの。

・Rubyに本体に付属して標準で入っている
・ライブラリ、モジュール
・gemコマンドで簡単インストール
> gem install 

コントローラの作成

rails generate controller CamelCases home help

=> camelCases/home と camelCases/help が作成される

  • コントローラはキャメルケースで名付ける e.g) AtoBtoC

  • 複数形にする?

コントローラの削除

rails destroy controller CamelCases home help

同様にモデルも...

  • モデルの作成

    rails generate model Foo bar:string baz:integer

  • モデルの削除

    rails destroy model Foo

マイグレーションも可能

routes.rb とは

get "static_pages/home" get "static_pages/help"

URL:127.0.0.1:3000/static_pages/home にアクセスすると、 static_pages/home の内容が反映される。

routes というもとは、◎◎にアクセスしたら△△を表示するっていう解釈で良いだろう。

ページの増やし方

  1. routes.rb にページ情報の追加 e.g)

    get 'static_pages/about'

  2. コントローラに追加 e.g) static_pages_controller.erb に追加

    def about

    end

  3. ページの作成 e.g) about.html.erb

Don’t Repeat Yourself, DRY

重複作業をなくす。以下が例である。

  • ページのタイトルがほぼ同じの場合
  • ページ構造がほとんど似ている場合

この時の作業

  1. ラベルに情報を与える

    <% provide(:title, 'Home') %> => :title = 'home'

  2. ページ内に以下のコードを入力

    <%= yield(:title) %> => :title を表示(このとき、:title は home となる)

さらに、共通の項目をなくす場合

  • Application.html.erb に書く

Railsには、共通の構造をまとめるためのapplication.html.erbという特別なレイアウトファイルがあります。 ヘッダー情報等をここにまとめると楽ですな。

e.g)

  <title>Ruby on Rails Tutorial Sample App | <%= yield(:title) %></title>
</head>
<body>

<%= yield %>
</body>
</html>

内にある

<%= yield %>

は、先ほどとは違く、レイアウトを使用するうえでは、/static_pages/homeにアクセスすると、home.html.erbの内容がHTMLに変換され、<%= yield %>の位置に挿入されるということだけ理解しておけば問題ありません。

Helper

  1. Helperに関数を記述
  def full_title(page_title)
    base_title = "Ruby on Rails Tutorial Sample App"
  end
  1. html.erbに関数を呼び出すコードを書く
<%= full_title(yield(:title)) %>
  1. html.erb が呼び出された際、 full_title が実行される。

つまり、html.erbに以下を記述すると関数を呼び出し、実行する。

<%= function(arguments) %>

■★■★■★■★■★■★■★■★■★■★■★■★■★■★■★■★■★■★■★■★

クラスの継承

class StaticPagesController < ApplicationController
  def home
  end
    ~~~~~~~
end

StaticPagesController は ApllicationControllerを継承している。

クラスについて

class User
  attr_accessor :name, :email

  def initialize(attributes = {})
    @name  = attributes[:name]
    @email = attributes[:email]
  end

  def formatted_email
    "#{@name} <#{@email}>"
  end
end

attr_accessor :name, :email

これは、アトリビュートアクセサといい、 クラスやモジュールにインスタンス変数を読み書きするためのアクセサメソッドを定義します。 attr_accessor (Module) - Rubyリファレンス

class User

  def initialize(attributes = {})
    # initialize を行った時、引数があればそれを代入する
    # ない場合は、nil が代入される
    @name  = attributes[:name]
    @email = attributes[:email]
  end

  def formatted_email
    "#{@name} <#{@email}>"
  end
end

rails console require './example_user'

example = User.new example.name = "aaaa" => Error!

ってことで、変数を使う場合は、アトリビュートアクセサは必須ですね。

広告を非表示にする