学習メモ

ユーザー登録

サイトのレイアウトにデバッグ情報を追加する
<%= 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)