Unsuccessful edits
這節要實作失敗的編輯,我們要增加一個 update action,使用 update_attributes 方法把 params hash 傳入然後更新資料。如果資料無效的話,update 就會回傳 false,也就是會進入 else 分支,重新渲染編輯頁面:
app/controllers/users_controller.rb
class UsersController < ApplicationController
def show
@user = User.find(params[:id])
end
def new
@user = User.new
end
def create
@user = User.new(user_params)
if @user.save
log_in @user
flash[:success] = "Welcome to the Sample App!"
redirect_to @user
else
render 'new'
end
end
def edit
@user = User.find(params[:id])
end
def update
@user = User.find(params[:id])
if @user.update_attributes(user_params)
# Handle a successful update.
else
render 'edit'
end
end
private
def user_params
params.require(:user).permit(:name, :email, :password,
:password_confirmation)
end
end
update_atrributes 的參數 user_params 就是之前定義的 strong parameters,防止 mass assignment 的漏洞。
因為之前已經做好 User model 的驗證還有在編輯頁面放了 error_messages 的 patial,所以如果提交無效的編輯資料,頁面就會顯示錯誤訊息:
