学習メモ

ユーザー登録

サイトのレイアウトにデバッグ情報を追加する
<%= debug(params) if Rails.env.development? %>

Railsにはテスト環境(test)、開発環境(development)、そして本番環境(production)の3つの環境がデフォルトで装備されている。Rails consoleのデフォルトの環境はdevelopment。

上のコードは環境開発でのみデバッグを表示させている。 デバッグ情報は開発環境以外で表示させないべきである。

データベースのユーザーの詳細をみる

>> puts user.attributes.to_yaml
---
id: 1
name: michael john
email: michael@example.com
created_at: !ruby/object:ActiveSupport::TimeWithZone
  utc: &1 2021-02-01 07:26:43.671753000 Z
  zone: &2 !ruby/object:ActiveSupport::TimeZone
    name: Etc/UTC
  time: *1
updated_at: !ruby/object:ActiveSupport::TimeWithZone
  utc: &3 2021-02-01 07:33:12.681265000 Z
  zone: *2
  time: *3
password_digest: "$2a$12$dKLhxehDNExO/XZ0HF71JuQxT545iSn6fbOYhafNY9Nmq1nCpkmSi"
=> nil

>>puts user.attributes.to_yamlはy user.attributesでも同じ結果

Usersリソース

/users/1 のURLを有効にするために、routesファイル(config/routes.rb)に次の1行を追加

Rails.application.routes.draw do
  root 'static_pages#home'
  get  '/help',    to: 'static_pages#help'
  get  '/about',   to: 'static_pages#about'
  get  '/contact', to: 'static_pages#contact'
  get  '/signup',  to: 'users#new'
  resources :users
end
HTTP URL Action route
GET /users index users_path
GET /users/1 show user_path(user)
GET users/new new new_user_path
POST users create users_path
GET users/1/edit edit edit_user_path(user)
PATCH users/1 update user_path(user)
DELETE users/1 destroy user_path(user)

ユーザーを表示するために、標準的なRailsの場所を使う。Railsにおける標準的な場所とは、app/views/users/show.html.erbを指す。
app/views/users/show.html.erb

<%= @user.name %>, <%= @user.email %>

ユーザー表示ビューが正常に動作するためには、Usersコントローラ内のshowアクションに対応する@user変数を定義する必要がある。
app/controllers/users_controller.rb

class UsersController < ApplicationController

  def show
    @user = User.find(params[:id])
  end

  def new
  end
end
ユーザー登録フォーム

ユーザー登録ページ /signup のルーティングは、Usersコントローラーのnewアクションに既に紐付けられているので
app/controllers/users_controller.rb

class UsersController < ApplicationController

  def show
    @user = User.find(params[:id])
  end

  def new
   @user = User.new
  end
end


app/views/users/new.html.erb

<% provide(:title, 'Sign up') %>
<h1>Sign up</h1>

<div class="row">
  <div class="col-md-6 col-md-offset-3">
    <%= form_with(model: @user, local: true) do |f| %>
      <%= f.label :name %>
      <%= f.text_field :name %>

      <%= f.label :email %>
      <%= f.email_field :email %>

      <%= f.label :password %>
      <%= f.password_field :password %>

      <%= f.label :password_confirmation, "Confirmation" %>
      <%= f.password_field :password_confirmation %>

      <%= f.submit "Create my account", class: "btn btn-primary" %>
    <% end %>
  </div>
</div>

HTMLソースの内部構造
次の埋め込みRuby

<%= f.label :name %>
<%= f.text_field :name %>

このようなHTMLを生成します。

<label for="user_name">Name</label>
<input id="user_name" name="user[name]" type="text" />

同様に

<%= f.label :email %>
<%= f.email_field :email %>

<label for="user_email">Email</label>
<input id="user_email" name="user[email]" type="email" />

同様に

<%= f.label :password %>
<%= f.password_field :password %>

<label for="user_password">Password</label>
<input id="user_password" name="user[password]" type="password" />
Strong Parameters
params.require(:user).permit(:name, :email, :password, :password_confirmation)

このコードはparamsハッシュでは:user属性を必須とし、名前、メールアドレス、パスワード、パスワードの確認の属性をそれぞれ許可し、それ以外を許可しないようにする。
これらのパラメータを使いやすくするために、user_paramsという外部メソッドを使うのが慣習になっている。

@user = User.new(user_params)

学習メモ 2

テストコート


意義

  • テストが揃っていれば、機能停止に陥るような回帰バグ(Regression Bug: 以前のバグが再発したり機能の追加/変更に副作用が生じたりすること)を防止できる。

  • テストが揃っていれば、コードを安全にリファクタリング(機能を変更せずにコードを改善)できる。

  • テストコードは、アプリケーションコードから見ればクライアントとして動作するので、アプリケーションの設計やシステムの他の部分とのインターフェイスを決めるときにも役に立つ

エラーの種類

$ rails test
NameError: undefined local variable or method `static_pages_about_url'

AboutページへのURLが見つからないために、ルーティングを修正する。

Rails.application.routes.draw do
  get  'static_pages/home'
  get  'static_pages/help'
  get  'static_pages/about'
  root 'application#hello'
end

次にrails testをする。

$ rails test
AbstractController::ActionNotFound:
The action 'about' could not be found for StaticPagesController 

StaticPagesコントローラにaboutアクションがないので、aboutアクションを追加する。

class StaticPagesController < ApplicationController

  def home
  end

  def help
  end

  def  about
  end
end

次にrails testをする。

$ rails test
ActionController::UnknownFormat: StaticPagesController#about
is missing a template for this request format and variant.

Railsではテンプレートはviewのことを指す。
app/views/static_pagesディレクトリにabout.html.erbというファイルを作成する。

$ touch app/views/static_pages/about.html.erb

rails test をして、GreenになればOK!

Refactor

テストが green になったので、安心してコードをリファクタリングできるようになりました。アプリケーションの開発が進むと、コードのどこからともなく「腐敗臭」が漂い始めます。コードや記法の統一が崩れて読みづらくなる、クラスやメソッドが何百行にも膨れ上がって読む気を削がれる、なぜこのコードがここにあるのか最早誰もその理由を思い出せなくなる、同じコードがあちこちにコピペされて少しずつ書き換えられ手に負えなくなる、などです。コンピュータにしてみればどんなに汚らしいコードであろうと、そこにあるがままに実行するだけですが、人間はそういうわけにはいきません。こまめにリファクタリングを繰り返してコードを常にすみずみまで美しくコンパクトに保ち、他の開発者や未来の自分の開発意欲を阻喪することのないようにしなければなりません。

タイトルをテスト

同じコードを繰り返すことはRubyの「DRY」(Don’t Repeat Yourself: 繰り返すべからず)という原則に反します。
重複を取り除くテクニックの1つとして、ビューで「埋め込みRuby」(Embedded Ruby)が使えます。

  • app/views/static_pages/home.html.erb

  • app/views/static_pages/help.html.erb

  • app/views/static_pages/about.html.erb

上記のTOPに<% provide(:title, "Home/Help/About") %>とする。

  • app/views/layouts/application.html.erb
    上記に<title><%= yield(:title) %> | Ruby on Rails Tutorial Sample App</title>とすると、挿入できる。
<!DOCTYPE html>
<html>
  <head>
    <title><%= yield(:title) %> | Ruby on Rails Tutorial Sample App</title>
    <%= csrf_meta_tags %>
    <%= csp_meta_tag %>
    <%= stylesheet_link_tag    'application', media: 'all',
                               'data-turbolinks-track': 'reload' %>
    <%= javascript_pack_tag    'application',
                               'data-turbolinks-track': 'reload' %>
  </head>

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

学習メモ 1

bundle install

 ➡️Gemfile.lockの差分(変更点)だけUpdate

bundle update

➡️Gemfile.lockの中身を全て無視してUpdate

★短縮形

$ rails server $ rails s
$ rails console $ rails c
$ rails generate $ rails g
$ rails test $ rails t
$ bundle install $ bundle

静的なページの生成
git checkout -b static-pages
git checkout branchで確認
git checkout main/static-pagesで切替る

StaticPagesコントローラーを作成
rails generate controller StaticPages home help

自己紹介

どうも!はじめまして。ひでよしです!

このブログでは初投稿になります。

これからは、プログラミングや書籍で学んだことをアウトプットしていこうと思います!

f:id:hideyoshi7:20200902191815j:plain



 

 

経歴

26歳

外語専門学校卒

2016/4月〜現在

イベント運営&ツアースタッフに従事

8月 副業でUber Eatsドライバー始めました。

 f:id:hideyoshi7:20200903001356p:plain

 

外語専門学校卒業後はイベントの運営会社に入りました。ツアースタッフも兼任しており、主にジャニーズ(嵐やキスマイ)や2.5次元刀剣乱舞やあんスタ)を担当しています。日本全国のドームやアリーナはほぼ全て足を運びました。

プログラミングを始めたきっかけ

私は音楽関連で大手を含む4社からオファーがあり、今年の4月からその内の1社に転職する予定でした。

しかし、予期せぬコロナにより、イベントが全て中止で仕事がなくなり、この先のことを考えて、収束する目処が立たなかったために、苦渋の決断でしたが、この業界から立ち去る決意をしました。音楽といったイベントはいわばサービス業であり、お客様が楽しんでいただけるように最大のパフォーマンスを提供します。なので、違った形で、お客様が喜んでいただけるようなサービスを提供したいと思い、プログラミングを始めました。

 

プログラミング歴

2020/4月 プログラミング勉強開始

6月 Tech Academy フロントエンドコース(4週間)受講

10月 Runteq 受講

 

techacademy.jp

 

runteq.jp

趣味

  • サイクリング 
    8月からUber Eatsドライバー始めました。毎週150キロ以上走っています。
  • 将棋

    AmebaTVで将棋の対局を観覧したり、オンラインで対局しています。

  • 外国人と話すこと 
    最近は話す機会がないけど、話すと楽しい。今まで数百人の外国人と交流しました。
  • サウナ
    週4回は行っています。サウナ→水風呂→外気浴は最高です!
  • 筋トレ
    週4回ジムに行っています。健康的な体づくりを心がけています。

 

主な食生活

1年間以上、朝食は同じメニューです。

ベースブレッドに生ハム、サラダ、スクランブルエッグを挟み、

ギリシャヨーグルトにKIRKLAND ネイチャーズ スリーベリーミックスと冷凍葡萄とバナナ1本を入れています。

最後にプロテイン。朝食だけで50g以上タンパク質を摂るようにしています。

BASE BREAD ベースブレッド プレーン8個 チョコレート8個 ハーフセット 完全食 完全栄養食 食物繊維

Amazon | KIRKLAND ネイチャーズ スリーベリーミックス 1.81Kg 【冷凍品】 | KIRKLAND(カークランド) | 冷凍フルーツ 通販

集中力を維持するため昼食は食べません。血糖値が上がると眠くなりますので、空腹にならないように間食は多くとります。

主な間食は、おにぎり、素焼きナッツ、プロテインバー、茹で卵、チョコレートです。

夕食は好きな物を食べています。

 

今持っている資格

 

目標

  • 半年以内に自社開発会社に内定貰うこと
  • 11月の簿記試験2級に合格すること
    元々6月に受験予定だったけど、コロナで延期になったため
  • 今年中に体重5キロ増やす。
  • 半年以内に基本情報技術者試験合格
  • 半年以内にTOEIC900点取る!
    5年前にTOEIC820点取って以来受けていないので、チャレンジしたい。

おわりに

初めてのブログなので、結構シンプルになってしまいましたが、これからどんどんアウトプットの場として投稿して行き、書き方の工夫も学んでいけたらいいなーと思います。

ここまでご覧頂きありがとうございます。

これからもよろしくお願いしますm(__)m