学習メモ
ユーザー登録
サイトのレイアウトにデバッグ情報を追加する
<%= 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
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
自己紹介
どうも!はじめまして。ひでよしです!
このブログでは初投稿になります。
これからは、プログラミングや書籍で学んだことをアウトプットしていこうと思います!
経歴
26歳
外語専門学校卒
2016/4月〜現在
イベント運営&ツアースタッフに従事
8月 副業でUber Eatsドライバー始めました。
外語専門学校卒業後はイベントの運営会社に入りました。ツアースタッフも兼任しており、主にジャニーズ(嵐やキスマイ)や2.5次元(刀剣乱舞やあんスタ)を担当しています。日本全国のドームやアリーナはほぼ全て足を運びました。
プログラミングを始めたきっかけ
私は音楽関連で大手を含む4社からオファーがあり、今年の4月からその内の1社に転職する予定でした。
しかし、予期せぬコロナにより、イベントが全て中止で仕事がなくなり、この先のことを考えて、収束する目処が立たなかったために、苦渋の決断でしたが、この業界から立ち去る決意をしました。音楽といったイベントはいわばサービス業であり、お客様が楽しんでいただけるように最大のパフォーマンスを提供します。なので、違った形で、お客様が喜んでいただけるようなサービスを提供したいと思い、プログラミングを始めました。
プログラミング歴
2020/4月 プログラミング勉強開始
6月 Tech Academy フロントエンドコース(4週間)受講
10月 Runteq 受講
趣味
- サイクリング
8月からUber Eatsドライバー始めました。毎週150キロ以上走っています。 - 将棋
AmebaTVで将棋の対局を観覧したり、オンラインで対局しています。
- 外国人と話すこと
最近は話す機会がないけど、話すと楽しい。今まで数百人の外国人と交流しました。 - サウナ
週4回は行っています。サウナ→水風呂→外気浴は最高です! - 筋トレ
週4回ジムに行っています。健康的な体づくりを心がけています。
主な食生活
1年間以上、朝食は同じメニューです。
ベースブレッドに生ハム、サラダ、スクランブルエッグを挟み、
ギリシャヨーグルトにKIRKLAND ネイチャーズ スリーベリーミックスと冷凍葡萄とバナナ1本を入れています。
最後にプロテイン。朝食だけで50g以上タンパク質を摂るようにしています。
BASE BREAD ベースブレッド プレーン8個 チョコレート8個 ハーフセット 完全食 完全栄養食 食物繊維
Amazon | KIRKLAND ネイチャーズ スリーベリーミックス 1.81Kg 【冷凍品】 | KIRKLAND(カークランド) | 冷凍フルーツ 通販
集中力を維持するため昼食は食べません。血糖値が上がると眠くなりますので、空腹にならないように間食は多くとります。
主な間食は、おにぎり、素焼きナッツ、プロテインバー、茹で卵、チョコレートです。
夕食は好きな物を食べています。
今持っている資格
- TOEIC820点
- 実用英語技能検定2級
- 日本漢字能力検定2級
- MOS Excel 2016 Expert
- MOS Word 2016 Expert
- MOS PowerPoint 2016
- ITパスポート
目標
- 半年以内に自社開発会社に内定貰うこと
- 11月の簿記試験2級に合格すること
元々6月に受験予定だったけど、コロナで延期になったため - 今年中に体重5キロ増やす。
- 半年以内に基本情報技術者試験合格
- 半年以内にTOEIC900点取る!
5年前にTOEIC820点取って以来受けていないので、チャレンジしたい。
おわりに
初めてのブログなので、結構シンプルになってしまいましたが、これからどんどんアウトプットの場として投稿して行き、書き方の工夫も学んでいけたらいいなーと思います。
ここまでご覧頂きありがとうございます。
これからもよろしくお願いしますm(__)m