ActionController::ParameterMissing - 缺少参数或值为空:用户:

Har*_*ini 5 ruby ruby-on-rails ruby-on-rails-4

我试图在单击按钮阻止或取消阻止时更新属性。但它没有在数据库中更新,我得到了错误param is missing or the value is empty: 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
Run Code Online (Sandbox Code Playgroud)

这是我的视图代码

<h1>
  User Details
</h1>
<table class="table">
  <thead>
    <tr>
      <th>Users</th>
    </tr>
  </thead>
  <tbody>
    <% @users.each do |user| %>
      <tr>
        <td>
          <%= image_tag("/assets/image.jpg", style: "width: 60px; height: 60px;")%>
        </td>
        <td>
          <p class="font-weight-bold"><%= user.name %></p>
          <p><%= user.email %></p>
        </td>
        <td><%= user.active %></td>
        <td>
        <% if user.active == true  %>
        <%= button_to "Block", user_path(id: user.id, value: false), class: 'btn btn-outline-dark',  :method => :patch %>
        <%else%>
        <%= button_to "Unblock", user_path(id: user.id, value: true), class: 'btn btn-outline-dark',  :method => :patch %>
        <%end%>
      </td>
      </tr>
    <% end %>
  </tbody>
</table>
Run Code Online (Sandbox Code Playgroud)

我得到的终端日志

Started PATCH "/user/5?value=false" for 127.0.0.1 at 2018-04-12 14:49:57 +0530
    Processing by UserController#update as HTML
      Parameters: {"authenticity_token"=>"RyL/KkxIbVtZXojmERByarlN1qxXH0gK7moq2w5s4ULketOYGh1im+qPLvND2HkOlVC8gePlFyGCns0lf/Z/uQ==", "value"=>"false", "id"=>"5"}
      User Load (0.3ms)  SELECT  `users`.* FROM `users` WHERE `users`.`id` = 5 ORDER BY `users`.`id` ASC LIMIT 1
      User Load (0.2ms)  SELECT  `users`.* FROM `users` WHERE `users`.`id` = 5 LIMIT 1
    Completed 401 Unauthorized in 3ms (ActiveRecord: 0.6ms)



    ActionController::ParameterMissing - param is missing or the value is empty: user:
      app/controllers/user_controller.rb:31:in `user_params'
      app/controllers/user_controller.rb:15:in `block in update'
      app/controllers/user_controller.rb:14:in `update'

    Started POST "/__better_errors/7f240c65d5c4ef9a/variables" for 127.0.0.1 at 2018-04-12 14:49:57 +0530
Run Code Online (Sandbox Code Playgroud)

mrz*_*asa 4

您需要user带有active字段的参数:

  def user_params
    params.require(:user).permit(:active)
  end 
Run Code Online (Sandbox Code Playgroud)

你只发送value参数。您需要将您的button_to代码更改为类似的

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

(或active: false分别)。