我有一个rails应用程序,我试图添加一个未来来禁止现有用户。我的反应请求如下:
handleUserBan(evt) {
evt.preventDefault();
let user_id = evt.target.dataset.userId;
API.put('admin/users/'+user_id, {user: {banned: true}}, function(res) {
this.loadUsers();
}.bind(this))
}
我的用户控制器'里面admin namespace
是:
before_action :enforce_admin!
def show
@user = User.find(ban_params[:id])
end
def update
@user = User.find(ban_params[:id])
prms = ban_params
if prms.include?(:banned)
@user.update_attributes!(prms)
@user.save!
return render :status=>200, :json => {success: true}
end
end
private
def ban_params
params.require(:user).permit(:banned)
end
但是我收到了错误:
ActiveRecord: Record not found
Couldn't find User with 'id'=
即使用户在我的数据库中存在所选的ID。我的请求结构如下:
Request
Parameters:
{"user"=>{"banned"=>"true"},
"id"=>"7",
"format"=>"json"}
这是我的admin命名空间路由:
namespace :admin do
put 'ban_user', :to => 'users#ban_user'
resources :charges
resources :coaches
resources :events
resources :invoices
resources :reviews
resources :users
end
答案 0 :(得分:2)
只试用params[:id]
代替ban_params[:id]
方法ban_params
将仅从banned
返回params
的值。在这种情况下,params
包含{id:' user_id',操作:"您的操作",控制器:'控制器',...,用户: {禁止:真}}
def ban_params
params.require(:user).permit(:banned)
end
答案 1 :(得分:1)
此代码会过滤掉id
参数,因为它只允许banned
参数:
def ban_params
params.require(:user).permit(:banned)
end
这样的东西可能会起作用,虽然它会失去permit
约束:
params.permit(:id, :user => [:banned])