未找到现有用户的Rails 404

时间:2017-03-27 15:51:41

标签: 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))
}

我的用户控制器'里面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

2 个答案:

答案 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])