일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- vscode
- C로 시작하는 컴퓨터 프로그래밍4판
- javascript
- CSS
- 건담
- 비즈니스일본어
- Spring
- java
- Python
- 일본어
- 건담베이스
- springboot
- 자바
- jsp
- 인프런
- 一日一つメソッド
- 디지몬
- 반다이몰
- DART
- 単語
- rails
- 日本語
- html
- メソッド
- Flutter
- rails7
- 연습문제
- nico
- ruby
- Web
- Today
- Total
AR삽질러
Rails 一日一つメソッド (Day4) createメソッド 본문
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
'Ruby > RubyOnRails-日本語' 카테고리의 다른 글
Rails 一日一つメソッド (Day6) new, persisted?メソッド (0) | 2023.12.26 |
---|---|
Rails 一日一つメソッド (Day5) destroyメソッド (0) | 2023.12.25 |
Rails 一日一つメソッド (Day3) all, find_dy, renderメソッド (1) | 2023.12.23 |
Rails 一日一つメソッド (Day2) findメソッド (2) | 2023.12.22 |
Rails 一日一つメソッド (Day01) 基本理念 (0) | 2023.12.21 |