LoginSignup
0
2

More than 5 years have passed since last update.

railsのキホンvol.6(ユーザー登録、編集など)

Last updated at Posted at 2019-03-17

ユーザー機能

まず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

0
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
2