簡體   English   中英

ParameterMissing - 參數缺失或值為空:user

[英]ParameterMissing - param is missing or the value is empty: user

我需要更改用戶類型。 通過STI完成。

單擊該鏈接將傳遞參數:type。

我的模特:

class User < ApplicationRecord
class Admin < User
class Seller < User
class Guest < User

查看

tbody
    - @users.each do |user|
      tr 
        td = user.email
        td = user.type
        td = link_to "admin", edit_user_path(user, type: 'Admin')
        td = link_to "guest", edit_user_path(user, type: 'Guest')
        td = link_to "seller", edit_user_path(user, type: 'Seller')

的routes.rb

  resources :users 
  resources :admins, controller: :users, :type => "Admin"
  resources :guests, controller: :users, :type => "Guest"
  resources :sellers, controller: :users, :type => "Seller"

錯誤

ActionController::ParameterMissing in UsersController#update
param is missing or the value is empty: user

Parameters:

{"_method"=>"patch", "authenticity_token"=>"56bC4iWSsYd+VrN7RV0NCMj4YD+fIMQKb8uKKC9dUkMtOORAilwPlk3oAgT2L8j5qMsH4tNdzy6zbdL5nVVi7Q==", "type"=>"Admin", "id"=>"3"}

調節器

  def update
    if current_admin
      if @user.update(user_params)
        redirect_to users_path
      else
        render 'edit'
      end
    end
  end

  private
  def user_params
    params.require(:user).permit(:type)
  end

為什么這個錯誤? action期望一個參數:用戶,但它不是?

require確保存在參數。 如果它存在,則返回給定鍵的參數,否則引發ActionController::ParameterMissing error

您需要user參數,但它們在參數中缺失。

為了得到這個,你有很多方法。

方法1:

刪除require應該可以解決問題。

params.permit(:type)

方法2:

user[]作為名稱添加到編輯表單中的輸入。

如果添加編輯表單,將詳細說明方法1。

方法3:

另一種解決方案是將用戶密鑰添加到參數中。

def update
    if current_admin
        params.user = {
            "type": params.type,
            "id": params.id
        }
      if @user.update(user_params)
        redirect_to users_path
      else
        render 'edit'
      end
    end
  end

  private
  def user_params
    params.require(:user).permit(:type)
  end

參考api documentaiton

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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