AR삽질러

Rails 一日一つメソッド (Day4) createメソッド 본문

Ruby/RubyOnRails-日本語

Rails 一日一つメソッド (Day4) createメソッド

아랑팡팡 2023. 12. 24. 16:02
728x90

 

Rails 一日一つメソッド (Day4) createメソッド

 

createメソッド

 - createメソッドはActive RecordModelを使ってDatabaseに新しいRecorを生成する時に使う。

 - オブジェクトをインスタンス化し渡された属性を使って値を設定した後、DabaBaseに保存する。

 - createメソッドは 'new' と 'save'メソッドを一つに結合したものと同じ。

user = User.create(name: "Arang", email: "arang@example.com")

 

createメソッド動作方式

 1) インスタンス生成

  - newメソッドでModelの新しいインスタンスを生成する。

 2) 属性割り当て

  - 渡されたパラメータを使ってModelの属性に値を割り当てる。

 3) 保存

  - saveメソッドを呼び出してインスタンスをDabaBaseに保存する。

 4) 返還( return )

  - 生成されたオブジェクトを返還する。

 

createメソッド有効性検査
 - createメソッドは、モデルで定義された有効性チェックを自動的に実行し、有効性チェックに合格できない場合、オブジェクトは保存されず、エラー メッセージを含めることになる。

 

create! メソッド

 - createメソッドと似ている。違いは有効性検索をできなかったり保存に失敗した時に例外を発生する。失敗した理由をすぐ確認する時に有効な方法。

 


 

createメソッドを使って会員登録

 

users_controller.rb

class UsersController < ApplicationController
    def new
        @user =User.new
    end

    def create
        @user = User.create(user_param)
      
        if @user.persisted?
          redirect_to user_path(@user), notice: 'ユーザーが登録されました。'
        else
          render :new
        end
    end      

    private
        def user_param
            params.require(:user).permit(:name, :email, :password, :password_confirmation)
        end
end

 

newアクション

 - 新しいUserオブジェクトを生成し会員登録Formにバインディングする。

 

create アクション

 - ユーザーから入力を受けて新しいUserオブジェクトを生成しDatabaseに保存する。

有効性検索を通したたユーザーを 'user_path(@user)' にリダイレクションし、失敗したらFormをレンダリングする。

 

routes.rb

Rails.application.routes.draw do
  get 'signup', to: 'users#new', as: 'signup'
  post 'users', to: 'users#create'
end

user#createに対するURLを定義しFormデータが提出する時に使われる。

signup URLはユーザーに会員登録Formを表紙する 'user#new' アクションにマーピングされる。

 

Gemfile

gem "bcrypt", "~> 3.1.7"

 

user.rb

class User < ApplicationRecord
    has_secure_password

    validates :name, presence: true
    validates :email, presence: true, uniqueness: true
    validates :password, presence: true, length: { minimum: 6 }, if: -> { new_record? || !password.nil? }
end

 has_secure_password

  - has_secure_passwordを使ってPasswordの暗号化及び認証機能を提供する。

 - name, email, passwordの有効性を確認する。

 

new.html.erb

<!-- app/views/users/new.html.erb -->
<h1>ユーザー登録</h1>

<% if flash[:notice] %>
  <p class="notice"><%= flash[:notice] %></p>
<% end %>

<% if flash[:alert] %>
  <p class="alert"><%= flash[:alert] %></p>
<% end %>

<%= form_with model: @user, url: users_path, method: :post, local: true do |form| %>
  <% if @user.errors.any? %>
    <div id="error_explanation">
      <h2><%= pluralize(@user.errors.count, "error") %> prohibited this user from being saved:</h2>

      <ul>
      <% @user.errors.full_messages.each do |message| %>
        <li><%= message %></li>
      <% end %>
      </ul>
    </div>
  <% end %>

  <div>
    <%= form.label :name, '名前' %>
    <%= form.text_field :name %>
  </div>

  <div>
    <%= form.label :email, 'メール' %>
    <%= form.email_field :email %>
  </div>

  <div>
    <%= form.label :password, 'パスワード' %>
    <%= form.password_field :password %>
  </div>

  <div>
    <%= form.label :password_confirmation, 'パスワード確認' %>
    <%= form.password_field :password_confirmation %>
  </div>

  <div>
    <%= form.submit '登録' %>
  </div>
<% end %>


https://github.com/designAR/rails_method_study/tree/day04

 

GitHub - designAR/rails_method_study

Contribute to designAR/rails_method_study development by creating an account on GitHub.

github.com

 

728x90
반응형
LIST