Ruby on Rails5 Progate Ⅵ ユーザーの登録・編集
〜 ユーザーの登録 〜
1. ユーザーの一覧
2. ユーザーの詳細
3. ユーザーの新規登録
4. ユーザーの情報編集
ユーザーを管理するテーブルとモデルの作成
usersテーブルを用意
(データ型: string は短い文字列を保存する際に使う)
[コマンドライン] *$ rails consoleを起動する前に実行
$rails g model User name:string email:string
//$rails g model モデル名 カラム名:データ型
$rails db:migrate
//テーブル変更の反映
ユーザーのデータを作る
ex.)[rails console] Userモデルのインスタンス作成
user = User.new(name:"カイル・リース", email:"Kyle.lease@gmail.com")
user.save
バリデーションの追加
[models/user.rb]
validates :name{presence: true}
validates :email,{presence: true, uniqueness: true} //emailに重複が無いようにする
//「:」の位置注意
1. ユーザー一覧ページの作成
[コマンドライン]
$ rails g controller users index //コントローラ名[users] アクション名[index]
[users_controller.rb]
def index
@users = User.all //@usersにUserテーブルの情報を代入
end
[users/index.html.erb]
ex.)//ユーザー名一覧をhtmlに表示
<% @users.each do |user|%>
~
<%= user.name %>
~
<% end %>
2.ユーザー詳細ページの作成
ユーザーごとにURLにidを含めて表示する
[routes.rb]
get "users/:id" => "users#show" //URLの末尾がid(数値)になるので
[users_controller.rb]
def show
@users = User.find_by(id: params[:id])
end
ex.)
[users/show.html.erb]
<%= @users.name %>
<%= @users.email %>
[users/index.html.erb]
<% @users.each do |user| %>
<%= link_to(user.name, "/users/#{user.id}")%>
//一覧にユーザー名を表示させてidごとにリンクを設定
<% end %>
〜ユーザーの登録機能の作成〜
新規登録の流れ
1.ユーザー登録ページの作成
2.ユーザーの保存
3.サクセス・エラーメッセージの表示
ユーザー登録ページの作成
URL = /signup でアクセスできるようにする
*signup = 新規登録(英語)
アクション名= new
URL = "signup"
フォーム部分の作成
ユーザー名とメール登録は<input>タグの一行フォームで十分
[routes.rb]
get "signup" = "users#new"
//URL = loclalhost:3000/signup で ures/new.html.erbにアクセスする
[users_controller.rb]
def new
end
ex.)見た目
[application.html.erb]
//ヘッダー部分
<%= link_to("新規登録", "/signup")%>
[users/new.html.erb]
<p>ユーザー名</p>
〜 <input>
ユーザーの保存
createアクションで保存・ユーザー一覧に戻るを設定
inputタグにテーブルの情報ごとのname属性を設定
*name属性の値が送信されるハッシュのキーになる
フォームから送信されるデータ受け取りのためにformタグメソッドで囲んでデータの送信先を指定
[routes.rb]
post "posts/create" => "posts#create"
[users_controller.rb]
def create
@users = User.new(name: params[:name], email: params[:email])
@users.save
redirect_to("/users/#{@users.id}")
end
[users/new.html.erb]
ex.)
<%= form_tag("/users/create") do %>
〜〜 <input name="name">
<input name="email">
<% end %>
保存に成功・失敗した場合の処理
flashの使用
1.フォームの表示
2.エラー文を表示
3.フォームに初期値を入れる
フォームの初期値
<input>タグではvalue値が初期値になる
=value属性にRubyを埋め込む
[users_controller.rb]
def new
@user = User.new //これ書かないとrenderで戻った時にエラーが出るらしい
end
def create
@user = User.new(name: params[:name], email: params[:email])
if @user.save
flash[:notice] = "ユーザ登録が完了しました"
else
render("user/new")
end
end
[users/new.html.erb]
〜
<% @each.errors.full_messages.each do |message| %>
<div class="form-error">
<%= message>
</div>
<% end %>
//エラーメッセージを失敗してrenderした際に表示
<%= form_tag("/users/create") do %>
<p>ユーザー名</p>
<input name="name" value="<%= @user.name %>">
<p>メールアドレス</p>
<input name="email" value="<%= @user.email %>">
<input type="submit" value="新規登録">
<% end %>
〜ユーザー編集の機能〜
1.ユーザー編集ページの作成
2.変更の保存
3.サクセス・エラーメッセージの表示
editアクションで編集ページの機能作成
updateアクションで受け取る
ユーザー編集ページ
URLには「localhost:3000/users/1/edit」のように編集するユーザーの id を含める
ユーザー編集フォームには初期値を設定
1.ユーザー編集ページの作成
editアクション
[routes.rb]
"get "users/:id/edit" => "users#edit"
[users_controller.rb]
def edit
@user = User.find_by(id: params[:id])
end
ex.)
[users/show.html.erb]
〜
<%= link_to("編集","/users/#{@users.id}/edit") %>
[users/edit.html.erb]
〜〜
ユーザー編集機能の完成
2.変更の保存
3.サクセス・エラーメッセージの表示
updateアクション
*render は id の書き込み不要、頭の「/」不要
[routes.rb]
post "users/:id/update" => "users#update"
[users.controller.rb]
def update
@user = User.find_by(id: params[:id])
@user.name = params[:name]
@user.email = params[:email]
if @user.save
flash[:notice] ="編集に成功しました"
redirect_to("/users/#{@user.id}")
else
render("users/edit")
end
end
[users/edit.html.erb]
〜
<% @each.errors.full_messages.each do |message| %>
<div class="form-error">
<%= message>
</div>
<% end %>
//エラーメッセージを失敗してrenderした際に表示
<%= form_tag("/users/#{@user.id}/update") do %>
〜
<input name="name" value="<%= @user.name %>">
<input name="email" value="<%= @user.email %>">
<input type="submit" value="保存">
<% end %>
この記事が気に入ったらサポートをしてみませんか?