学習メモ
ユーザー登録
サイトのレイアウトにデバッグ情報を追加する
<%= 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)