Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/52.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 未找到现有用户的Rails 404_Ruby On Rails_Postgresql_Reactjs_Controller - Fatal编程技术网

Ruby on rails 未找到现有用户的Rails 404

Ruby on rails 未找到现有用户的Rails 404,ruby-on-rails,postgresql,reactjs,controller,Ruby On Rails,Postgresql,Reactjs,Controller,我有一个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)) } 而我的管理命名空间中

我有一个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))
}
而我的
管理命名空间中的“userscoontroller”是:

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:未找到记录
找不到id为的用户=

即使我的数据库中存在具有所选id的用户。我的请求结构如下:

Request

Parameters:

{"user"=>{"banned"=>"true"},
"id"=>"7",
"format"=>"json"}
以下是我的管理员命名空间路由:

namespace :admin do
    put 'ban_user', :to => 'users#ban_user'
      resources :charges
      resources :coaches
      resources :events
      resources :invoices
      resources :reviews
      resources :users
    end

尝试使用
params[:id]
而不是
ban_params[:id]

方法
ban_params
将只返回
params
banked
的值。在本例中,
params
包含{id:'user_id',action:'your action',controller:'controller',…,user:{banked:true}

def ban_params
 params.require(:user).permit(:banned)
end

尝试使用
params[:id]
而不是
ban_params[:id]

方法
ban_params
将只返回
params
banked
的值。在本例中,
params
包含{id:'user_id',action:'your action',controller:'controller',…,user:{banked:true}

def ban_params
 params.require(:user).permit(:banned)
end

此代码正在过滤掉
id
参数,因为它只允许
禁用的
参数:

def ban_params
  params.require(:user).permit(:banned)
end
类似的操作可能会起作用,但它会失去
许可
约束:

params.permit(:id, :user => [:banned])

此代码正在过滤掉
id
参数,因为它只允许
禁用的
参数:

def ban_params
  params.require(:user).permit(:banned)
end
类似的操作可能会起作用,但它会失去
许可
约束:

params.permit(:id, :user => [:banned])

这很有效,只是一个快速跟进问题;为什么
params
即使我没有在我的控制器中定义这样的方法也能工作?这是否意味着我发送给控制器的所有参数都可以通过
params
访问,即使使用过滤器也可以?是的,您始终可以访问原始
params
散列。@anon023432,我知道,是的
params
方法包含所有请求参数
def params@|u params||=Parameters.new(request.Parameters)end
;为什么
params
即使我没有在我的控制器中定义这样的方法也能工作?这是否意味着我发送给控制器的所有参数都可以通过
params
访问,即使使用过滤器也可以?是的,您始终可以访问原始
params
散列。@anon023432,我知道,是的
params
方法包含所有请求参数
def params@_params| |=参数。新(request.Parameters)结束
感谢您的解决方案。即使这种方法也能工作,但我在这种情况下使用了另一种解决方案,因为我想保留我的
permit
constraint感谢您的解决方案。即使这种方法也能工作,但我在这种情况下使用了另一种解决方案,因为我想保持我的
许可
约束