Ruby on rails ActionController::ParameterMissing-param缺失或值为空:用户:

Ruby on rails ActionController::ParameterMissing-param缺失或值为空:用户:,ruby-on-rails,ruby,ruby-on-rails-4,Ruby On Rails,Ruby,Ruby On Rails 4,我试图在单击按钮块或取消阻止时更新属性。但它没有在数据库中得到更新,我得到的错误是参数丢失或值为空:user。即使在传递用户id时,我也会收到此错误。我找不到我的错误发生的地方 这是我的控制器代码: class UserController < ApplicationController before_action :set_user, only: [ :edit, :update] # GET /users # GET /users.json def i

我试图在单击按钮块或取消阻止时更新属性。但它没有在数据库中得到更新,我得到的错误是
参数丢失或值为空:user
。即使在传递用户id时,我也会收到此错误。我找不到我的错误发生的地方

这是我的控制器代码:

class UserController < ApplicationController
    before_action :set_user, only: [ :edit, :update]

    # GET /users
    # GET /users.json
    def index
      @users = User.all
    end

    def edit
    end

    def update
      respond_to do |format|
        if @user.update(user_params)
          format.html { redirect_to user_index_path, notice: 'User was successfully blocked.' }
        else
          format.html { render :index }
        end
      end
    end

    private
      # Use callbacks to share common setup or constraints between actions.
      def set_user
        @user = User.find(params[:id])
      end

      # Never trust parameters from the scary internet, only allow the white list through.
      def user_params
        params.require(:user).permit(:active)
      end
  end

您需要
user
param和
active
字段:

  def user_params
    params.require(:user).permit(:active)
  end 
您只发送
参数。你需要把你的按钮改成类似的代码

button_to("Block", user_path(id: user.id), 
   class: 'btn btn-outline-dark',  :method => :patch, params: { user: { active: true}}

(或
活动:分别为false

在方法
user\u params
中,您需要参数
user
。按钮上的链接只有get参数
,而没有
用户

get参数应该被称为类似于
user[active]

您的块按钮应如下所示:

<%= button_to "Block", user_path(id: user.id, 'user[active]': false), class: 'btn btn-outline-dark',  :method => :patch %>
:补丁%>

如果我们没有正确地从视图中传递参数,就会出现此错误。 在您的情况下,参数应该位于
user
散列中

在您的私人部分:-

def user_params
  params.require(:user).permit(:active)
end
实际上,您希望参数包含在
user
hash中

当您在用户散列中期待
active
属性时,它会给出错误,因为
param丢失或值为空:user

这意味着它正在查找
active
属性,该属性在传入参数中缺失

例如,应该命中控制器的参数应该如下所示:-

{"user"=>{"active"=>"true"}, "value"=>"false", "id"=>"5"}

在用户散列中传递视图页面中的活动参数,错误将消失。此外,您可以随时了解有关强参数的更多信息。

在您的user_params方法中,允许所有参数,params.require(:user.permit!)!或者逐个指定参数。
def user_params
  params.require(:user).permit(:active)
end
{"user"=>{"active"=>"true"}, "value"=>"false", "id"=>"5"}