【本日の学習内容:Rails課題2】
CRUD処理を実装したアプリの作成を進めました。
✅コントローラのアクションでデータを登録するための処理を書く
app/controllersの中にある users_controller.rb を開き、createアクションを記述する。
class UsersController < ApplicationController
# 新規登録画面に対応するアクション
def new
# Userモデルのオブジェクトを作り、インスタンス変数に格納する
@user = User.new
end
def create
end
end
✅createアクションと一緒にStrong Parameterを記述する
Railsでは、データベースに予期せぬ値が登録されないように、登録する値を制限できる機能がある。それにより、「数字を登録するはずのところに文字列が登録される」といった不測の自体を防いでくれる。
そして、その機能を実現するのがStrong Parameter。
class UsersController < ApplicationController
# 新規登録画面に対応するアクション
def new
# Userモデルのオブジェクトを作り、インスタンス変数に格納する
@user = User.new
end
def create
# String Parameter の記述
# user_paramsメソッドで指定した条件を満たしたら、データベースのUserテーブルにデータが追加される
User.create(user_params)
end
# UsersControllerの中でしか使わないメソッドはprivateのしたに記述する
private
def user_params
# この記述により、 user のパラメータに紐づいた name や age しかデータベースに登録できないようになる
params.require(:user).permit(:name, :age)
end
end
なんとなく分かったけど、なんで:userとするのかはいまいち理解できず、、
✅ビューにcreate.html.erbを追加する
追加が終わったら、create.html.erbに以下のコードを記述する。
<h1>登録完了</h1>
<%= link_to "一覧画面へ", "/users" %>
ここまできたら、データベースにデータが登録できたか確認する。
自分が投稿したデータがテーブルに保存されていれば、投稿機能の実装は成功。
まずは、サーバーを立ち上げ、以下のURLにアクセスする。
http://localhost:3000/users/new
--一覧表示機能の実装--
✅一覧表示画面へのルーティングを書く
Rails.application.routes.draw do
# 一覧画面へのルーティング
get '/users', to: 'users#index'
# 新規投稿画面へのルーティング
get '/users/new', to: 'users#new'
# 新規登録するためのルーティング
# <%= form_with model:@user, url: "/users", method: :post, local: true do |f| %>と対応している
post '/users', to: 'users#create'
end
✅usersコントローラにindexアクションを定義する
投稿したデータをデータベースから取り出す処理を書く。
class UsersController < ApplicationController
# 一覧画面に対応するアクション
def index
@users = User.all
end
# 新規登録画面に対応するアクション
def new
# Userモデルのオブジェクトを作り、インスタンス変数に格納する
@user = User.new
end
def create
# String Parameter の記述
# user_paramsメソッドで指定した条件を満たしたら、データベースのUserテーブルにデータが追加される
User.create(user_params)
end
# UsersControllerの中でしか使わないメソッドはprivateのしたに記述する
private
def user_params
# この記述により、 user のパラメータに紐づいた name や age しかデータベースに登録できないようになる
params.require(:user).permit(:name, :age)
end
end
✅index.html.erbを作成し、ユーザーデータが一覧表示できるようにする
<%= link_to "投稿画面へ", "/users/new"%>
<%# @usersには(User.allによって)userテーブルから取得してきた全てのデータが配列になって入っている %>
<% @users.each do |user| %>
<p>
<%= user.name %>
<%= user.age %>
</p>
<% end %>
ここまでできたら、一度サーバーを立ち上げRailsアプリの動作を確認する。
ユーザーのデータが一覧表示されていれば大丈夫。
以下のURLでアクセスする。