簡體   English   中英

Rails-參數缺失或值為空:用戶

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM