我需要更改用户类型。完成STI。
单击该链接会传递参数:type。
我的模特:
tbody
- @users.each do |user|
tr
td = user.email
td = user.type
td = link_to "admin", edit_user_path(user, type: 'Admin')
td = link_to "guest", edit_user_path(user, type: 'Guest')
td = link_to "seller", edit_user_path(user, type: 'Seller')
浏览
resources :users
resources :admins, controller: :users, :type => "Admin"
resources :guests, controller: :users, :type => "Guest"
resources :sellers, controller: :users, :type => "Seller"
的routes.rb
ActionController::ParameterMissing in UsersController#update
param is missing or the value is empty: user
Parameters:
{"_method"=>"patch", "authenticity_token"=>"56bC4iWSsYd+VrN7RV0NCMj4YD+fIMQKb8uKKC9dUkMtOORAilwPlk3oAgT2L8j5qMsH4tNdzy6zbdL5nVVi7Q==", "type"=>"Admin", "id"=>"3"}
错误
def update
if current_admin
if @user.update(user_params)
redirect_to users_path
else
render 'edit'
end
end
end
private
def user_params
params.require(:user).permit(:type)
end
控制器
{{1}}
为什么会出现这个错误? action需要一个参数:用户,但不是吗?
答案 0 :(得分:0)
require
确保存在参数。如果它存在,则返回给定键的参数,否则引发ActionController::ParameterMissing error
。
您需要user
参数,但参数中缺少该参数。
要想做到这一点,你有很多方法。
方法1:
删除require应该可以解决问题。
<强> params.permit(:type)
强>
<强>方法2:强>
在编辑表单的输入中添加user[]
作为名称。
如果添加编辑表单,请详细说明方法1.
<强>方法3:强>
另一种解决方案是将用户密钥添加到参数中。
def update
if current_admin
params.user = {
"type": params.type,
"id": params.id
}
if @user.update(user_params)
redirect_to users_path
else
render 'edit'
end
end
end
private
def user_params
params.require(:user).permit(:type)
end