[英]Rails - param is missing or the value is empty: user
我一直在根據Hartl的指南開發網站。 我想將密碼重置功能移至它自己的部分。
我創建了部分_passreset.html.erb。 當前,它是_form.html.erb的精確副本。 我打算對其進行編輯,使其僅具有密碼字段
在“用戶show.html.erb”頁面(配置文件頁面)上,我具有“編輯”和“密碼重置”的鏈接。 這是代碼:
<% if current_user.admin? || current_user == @user %>
<%= link_to "Edit", edit_user_path(@user) %> |
<%= link_to "Password Reset", passreset_user_path(@user)%>
<% end %>
當我單擊“密碼重置”鏈接時,出現以下錯誤:
UsersController#passreset中的ActionController :: ParameterMissing
參數丟失或值為空:用戶
我的編輯頁面仍然可以正常運行。
錯誤的來源是我的用戶控制器params語句:
def user_params
params.require(:user).permit(:name, :email, :password, :password_confirmation, :admin)
end
應用程序跟蹤顯示:
app/controllers/users_controller.rb:89:in `user_params'
app/controllers/users_controller.rb:29:in `block in passreset'
app/controllers/users_controller.rb:28:in `passreset'
新功能的路由如下所示:
resources :users do
resources :articles
get 'passreset'
end
耙路線顯示這兩行,一行用於編輯,一行用於passreset:
edit_user GET /users/:id/edit(.:format) users#edit
passreset_user GET /users/:id/passreset(.:format) users#passreset
passreset方法(而不是通知)是update方法的精確副本。
def passreset
respond_to do |format|
if @user.update(user_params)
format.html { redirect_to @user, notice: 'Password was successfully updated.' }
format.json { render :show, status: :ok, location: @user }
else
format.html { render :edit }
format.json { render json: @user.errors, status: :unprocessable_entity }
end
end
end
看來@user沒有傳入,但我不明白為什么。
passreset_user_path(@user)
不會將用戶“傳遞”到相關方法中,而是會生成一個URL。 該網址將包含一個ID段。 它看起來像這樣:
/users/123/passreset
您的操作將使用params[:id]
可用的ID段進行調用。 在數據庫中找到相應的用戶由您決定。
無需依賴params[:user]
,您需要按照@user = User.find(params[:id])
更大的問題是您的passreset
操作沒有意義。 它似乎已設置為接收包含用戶新屬性的POST請求,但是您正在使用一個按鈕鏈接到該請求,該按鈕將生成一個沒有用戶屬性有效載荷的GET請求。
您缺少整個中間步驟,在該步驟中向用戶顯示密碼重置表單。 您的第一個請求需要處理該表單,然后該表單可以POST回您的passreset
方法。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.