Rails:更新操作中缺少参数

时间:2015-08-16 19:03:55

标签: ruby-on-rails ruby-on-rails-4.1

以下是错误消息:

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

完整错误日志

ActionController::ParameterMissing (param is missing or the value is empty: user):
  app/controllers/users_controller.rb:36:in `update_user_params'
  app/controllers/users_controller.rb:15:in `update'

错误突出显示这一行:

def update_user_params
      params.require(:user).permit(:role)
    end

错误的参数是:

{"utf8"=>"✓",
 "_method"=>"put",
 "authenticity_token"=>"NVSo53F3PFIhOxDthMFCAxgTIDAewnxppsGTNzkp/Zc=",
 "admin"=>{"role"=>"user"},
 "commit"=>"Make User",
 "id"=>"2"}

以下是我正在使用的表单:show.html.erb

<tr id="dashfield">
    <td><%= @user.first_name%></td>
    <td><%= @user.last_name %></td>
    <td><%= @role %></td>
    <td><% if @role == 'admin'%>
          <%= form_for @role, method: :put do |f|%>
          <%= f.hidden_field :role, :value => 'user'%>
          <%= f.submit 'Make User'%><%end%>
          <%else%>
          <%= form_for @role, method: :put do |f| %>
          <%= f.hidden_field :role, :value => 'admin'%>
          <%= f.submit 'Make Admin'%>
          <%end%>
          <%end%></td>
</tr>

这是控制器:

class UsersController < ApplicationController
  def new
    @user = User.new
  end
  def index
    @allusers = User.all
  end
  def show
    @user = User.find(params[:id])
    @role = @user.role
  end
  def update
    @user = User.find(params[:id])
    if @user.update(update_user_params)
    redirect_to '/users'
    else
      redirect_to "/users/#{id}"
    end
  end
  def create
    @user = User.new(user_params)
    @user.role = 'user'
    if @user.save
      session[:user_id] = @user.id
      redirect_to '/hours/new'
    else
      redirect_to '/signup'
    end
  end
  private
  def user_params
    params.require(:user).permit(:first_name, :last_name, :email, :password)
  end
    def update_user_params
      params.require(:user).permit(:role)
    end
end

错误是说无法找到数据库,用户?解决这个问题的方法是什么?

2 个答案:

答案 0 :(得分:3)

您的错误是:

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

因为您的update_user_params要求user出现在参数中。因为它目前没有出现在你的参数中,所以它会抛出这个错误。

请参阅here了解params.require的工作原理。

在您的表单中,您可以尝试添加以下内容:

<%= f.hidden_field :user, { :value => @user } %>

答案 1 :(得分:1)

以下是我找到的解决方案:

<td><% if @role == 'admin'%>
          <%= form_for @user, method: :put do |f|%>
          <%= f.hidden_field :role, :value => 'user'%>
          <%= f.submit 'Make User'%><%end%>
          <%else%>
          <%= form_for @user, method: :put do |f| %>
          <%= f.hidden_field :role, :value => 'admin'%>
          <%= f.submit 'Make Admin'%>
          <%end%>
          <%end%></td>

我刚刚用“@user”取代了“@role”,它就像一个魅力。这是一个愚蠢的错误,感谢所有看过它的人。