Reputation: 149
Here's the error message:
ActionController::ParameterMissing in UsersController#update
param is missing or the value is empty: user
Full error log
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'
the error highlights this line:
def update_user_params
params.require(:user).permit(:role)
end
the parameters on the error are these:
{"utf8"=>"✓",
"_method"=>"put",
"authenticity_token"=>"NVSo53F3PFIhOxDthMFCAxgTIDAewnxppsGTNzkp/Zc=",
"admin"=>{"role"=>"user"},
"commit"=>"Make User",
"id"=>"2"}
Here's the form I'm using: 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>
here's the controller:
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
Is the error saying that it cannot find the databse, user? Any solutions to this problem?
Upvotes: 4
Views: 1801
Reputation: 149
Here's the solution I found:
<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>
I just replaced the "@role" with "@user" and it works like a charm. this was a silly mistake, thank you for all who looked at it.
Upvotes: 1
Reputation: 34318
Your error is saying:
ActionController::ParameterMissing in UsersController#update param is missing or the value is empty: user
because your update_user_params
requires user
to be present in the params. As it is not present in your params currently, so it's throwing this error.
See here to know how params.require
works.
In your form, you can try adding something like this:
<%= f.hidden_field :user, { :value => @user } %>
Upvotes: 3