Ruby on Rails 7.3 バリデーションの表示とStrongparameter

投稿者: | 2019年8月2日

Ruby on Rails 7.3 バリデーションの表示とStrongparameterをやりました。

→要はリクエストされた項目の中で許可する項目だけにフィルタリングすること。普通ですね。

〇モデルの中でも,renderは使える
→ビューの中(パーシャル)だけではない。

必須であるnameやemailを空白でPOSTすると、サーバサイドのモデルのvalidationと突き合わされ、サーバサイドでエラーになる。
エラーになるとsaveがfalseを返すのでrenderでnew(最初の登録ページ)へ戻される。

ただし、URLのルーティング上は/users。

→クライアント側に制御が移ってリダイレクトがかかったわけではない。

parameterのハッシュを[:user]でリクエスト情報をとれる。
userというのは元をたどると、model名がそのままマッピングされている。

formのタグには@userしか指定してないしね。
<%= form_for(@user) do |f| %>

@user = User.new(params[:user])
これが最終的に成り立つ。マスアサインメント

でもセキュリティ上のリスクがあり、Strong Parametersに。

リスク:例えばadminという属性がある場合の話…。システム制御用項目を外から流し込まれちゃうってこと。

Strong Parameters:
要はリクエストされた項目の中で許可する項目だけにフィルタリングすること。
params.require(:user).permit(
:name, :email, :password, :password_confirmation
)

普通の発想。

〇user_paramsの慣習

private
def user_params
return params.require(:user).permit(:name, :email, :password, :password_confirmation)
end

def create
@user = User.new(user_params())
if @user.save
else
render ‘new’
end
end

これもなんてことはない。フィルタをかけるためにprivateメソッドを定義して

読んでるだけ。

普通の発想。

〇エラーメッセージ
共通のパーシャルは、sharedに置かれる慣習。
→views/shared/_error_messages.html.erb

<%= render error_messages %>を登録画面に入れる。

<% if @user.errors.any? >
これから始まるエラーページを作ればOK

コメントを残す

メールアドレスが公開されることはありません。