【備忘録】scaffoldで作成されたコントローラ処理

 
users_controller.rb

# POST /users
# POST /users.json
def create
@user = User.new(user_params)//入力されたデータが入っている。新しいインスタンス変数に格納
 

respond_to do |format|
 if @user.save //これだけでユーザー情報を登録している
          //そのあとにformatを返している。
   format.html { redirect_to @user, notice: 'User was successfully created.' }
   format.json { render :show, status: :created, location: @user }
  else
   format.html { render :new }
   format.json { render json: @user.errors, status: :unprocessable_entity }
  end
 end
end
 
 
private
 # Use callbacks to share common setup or constraints between actions.
 def set_user
  @user = User.find(params[:id])
 end

 # Never trust parameters from the scary internet, only allow the white list through.
//バリデーションを行っている。送信データはparamsという変数に入ってくる。
//reqire:必須項目チェックができるメソッド
//userというデータグループが送られているかチェックしている
//その後に、中身のチェックpermitを実行
 
 def user_params
 params.require(:user).permit(:name, :age, :prof)
 end
 
 users_controller.rb
# GET /users/1
# GET /users/1.json
def show
end
 
showだけだが、htmlをきちんと返している。

ここに記載されている。

f:id:TMLabo:20200129221450p:plain

show.html.erb

 
<p id="notice"><%= notice %></p> //noticeの変数を表示

<p>
<strong>Name:</strong> //@userという変数の名前や年齢などを渡している。
<%= @user.name %>
</p>

<p>
<strong>Age:</strong>
<%= @user.age %>
</p>

<p>
<strong>Prof:</strong>
<%= @user.prof %>
</p>

<%= link_to 'Edit', edit_user_path(@user) %> |
<%= link_to 'Back', users_path %>
インスタンス変数を作っていないが、
なぜ、コントローラでshowだけなのに、インスタンス変数をビューで使えるのか?
 ↓
class UsersController < ApplicationController
before_action :set_user, only: [:show, :edit, :update, :destroy]
・・・
 
 
private 
//これ
//ここでユーザー情報を取得して、@userに格納している
before_actionでset_userを実行することにしている
# Use callbacks to share common setup or constraints between actions.
//paramsにサーバーに送ったデータをfindメソッドに引き渡す
//findでDBに接続して、idを渡す。そのidに該当する情報を取得できる。
 
 def set_user
  @user = User.find(params[:id])
 end

# Never trust parameters from the scary internet, only allow the white list through.
def user_params
params.require(:user).permit(:name, :age, :prof)
end
end