ユーザー機能
まずusersテーブルを用意する。
今回はユーザーネームとメールアドレスのみ。
$ rails g model User name:string email:string
$ rails db:migrate
↑のコマンドにより、usersテーブルを作る。
新規登録のバリデーションを作る
models/user.rb
#空白に対するバリデーション
validates :name,{presence:true}
#空白と重複に対するバリデーション
validates :email,{presence:true,uniqueless:true}
ユーザーの一覧
以下のようにしてindexアクションでユーザー一覧ページを作る。
users_controller.rb
def index
@users = User.all
end
users/index.html.erb
<div class="main users-index">
<div class="container">
<h1 class="users-heading">ユーザー一覧</h1>
<% @users.each do |user| %>
<div class="users-index-item">
<div class="user-right">
#ユーザー詳細へのリンク
<%= link_to(user.name, "/users/#{user.id}") %>
</div>
</div>
<% end %>
</div>
</div>
ユーザー詳細
showメソッドを用いる。
users_controller.rb
def show
@user = User.find_by("id: params[:id]")
end
users/show.html.erb
<div class="main user-show">
<div class="container">
<div class="user">
< h2><%= @user.name %></h2>
<p><%= @user.email %></p>
#ユーザー編集へのリンク、このままだと誰でも編集できてしまうのであとで編集する
<%= link_to("編集", "/users/#{@user.id}/edit") %>
</div>
</div>
</div>
ユーザー登録
ユーザー登録ページの作成
newアクションでユーザー新規登録画面を作る
users_controller.rb
def new
@user = User.new
end
users/new.html.erb
<div class="main users-new">
<div class="container">
<div class="form-heading">新規ユーザー登録</div>
<div class="form users-form">
<div class="form-body">
#新規登録に失敗した時、エラーメッセージ表示
<% @user.errors.full_messages.each do |message| %>
<div class="form-error">
<%= message %>
</div>
<% end %>
#クリエイトアクションにフォームデータを送る、またvalueは新規登録失敗した時の値として表示用
<%= 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 %>
</div>
</div>
</div>
</div>
ユーザーの保存
createアクションを作り、データベースに情報を保存する。
users_controller.rb
def create
#新しくインスタンスを作る
@user = User.new(name: params[:name], email: params[:email])
#成功した場合はフラッシュメッセージとともに詳細画面
#失敗した場合はエラーメッセージとともに新規登録画面
if @user.save
flash[:notice] = "ユーザー登録が完了しました"
redirect_to("/users/#{@user.id}")
else
render("users/new")
end
end
編集の保存
editファイルで編集の保存を行う。
users/edit.html.erb
<div class="main users-edit">
<div class="container">
<div class="form-heading">アカウント編集</div>
<div class="form users-form">
<div class="form-body">
<!-- エラーメッセージを表示するためのHTMLを貼り付けてください -->
<% @user.errors.full_messages.each do |message| %>
<div class="form-error">
<%= message %>
</div>
<% end %>
<!-- フォームの送信先を指定してください -->
<%= form_tag("/users/#{@user.id}/update") do %>
<p>ユーザー名</p>
<!-- name属性を設定してください -->
<input name="name" value="<%= @user.name %>">
<p>メールアドレス</p>
<!-- name属性を設定してください -->
<input name="email" value="<%= @user.email %>">
<input type="submit" value="保存">
<!-- endを追加してください -->
<% end %>
</div>
</div>
</div>
</div>
</div>
users_controller.rb
def edit
@user = User.find_by(id: params[:id])
end
ルーティングはこちら。
routes.rb
Rails.application.routes.draw do
post "users/:id/update" => "users#update"
get "users/:id/edit" => "users#edit"
post "users/create" => "users#create"
get "signup" => "users#new"
get "users/index" => "users#index"
get "users/:id" => "users#show"
get "posts/index" => "posts#index"
get "posts/new" => "posts#new"
get "posts/:id" => "posts#show"
post "posts/create" => "posts#create"
get "posts/:id/edit" => "posts#edit"
post "posts/:id/update" => "posts#update"
post "posts/:id/destroy" => "posts#destroy"
get "/" => "home#top"
get "about" => "home#about"
end
続き
https://qiita.com/jonnyjonnyj1397/items/1ce541775901561fc136