以下是错误消息:
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
错误是说无法找到数据库,用户?解决这个问题的方法是什么?
答案 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”,它就像一个魅力。这是一个愚蠢的错误,感谢所有看过它的人。