見てくださりありがとうございます。
自分は独学でrailsを勉強しているものです。
railsでWEBアプリケーションを作っているとユーザー登録の作成は必ず行いますよね!
なので今回はユーザー登録機能を実装するまでに必要なコードを淡々と書いて、コピペするだけでユーザー登録機能が作成できるようにします
###前提
アプリはすでに作成されている状態を想定しています(rails new アプリ名)
今回のユーザー登録機能とはユーザー登録画面でユーザーを新規登録するまでであり、登録内容の修正、ユーザー削除等の機能は作りません
あくまでもユーザー新規登録機能を作成し、成功すればユーザー詳細画面に飛ぶだけです
登録情報は名前とメールアドレスだけにしておきます
###ユーザーコントローラーの作成
rails generate controller Users show new
###ユーザーモデルの作成
rails generate model User name:string email:string
###ルートの作成
Rails.application.routes.draw do
resources :users
end
###ユーザーコントローラーのアクションの作成
class UsersController < ApplicationController
def show
@user = User.find_by(params[:id])
end
def new
@user = User.new
end
def create
@user = User.new(user_params)
if @user.save
redirect_to @user
else
render 'new'
end
end
private
def user_params
params.require(:user).permit(:name, :email)
end
end
createアクションに@user = User.new(user_params)このような記述がありますが、
実は@user = User.new(params[:user]) このようにも記述できます。
しかし後者はセキュリティー上良くありません。理由は後者の記述だと悪意のあるユーザーにでアプリケーションのデータベースが書き換えらる可能性があるからです。
今回で言うとname,email以外の例えばadminという値をリクエストに紛れ込ませ、管理者権限を奪い取ることができてしまいます。
ですのでuser_paramsによってnameとemail以外はリクエストの対象にならないように制限をかけることが正しい記述方法になります
redirect_to @user は redirect_to user_url(@user)と等価になります
これはユーザー作成が成功し、データベースへの保存が完了したらユーザー詳細ページに飛ぶことを示しています
###ユーザー登録画面の作成
<h1>ユーザー登録</h1>
<%= form_with(model: @user, local: true) do |f| %>
<%= f.label :name %>
<%= f.text_field :name %>
<%= f.label :email %>
<%= f.email_field :email %>
<%= f.submit "新規ユーザー登録", class: "btn btn-primary" %>
<% end %>
###ユーザー登録画面の作成(簡素ですが許して下さい)
<h1>ユーザー詳細ページ</h1>
<p><%= @user.name %>,<%= @user.email %></p>
以上これだけの記述でユーザー登録が完成します。
登録内容にパスワードが必要だったり、ユーザー情報の編集、ユーザーの削除機能が追加されても簡単に少ない記述で多くの機能が作成できるのがrailsのいいところですよね!
見てくださりありがとうございました。