这绝对是一个简单的问题,但它给了我一段艰难的时间,这可能是学习ruby概念的好方法。
我在set_user
方法上得到一个ArgumentError: wrong number of arguments (given 0, expected 1)
,它简单地从url获取参数并将其分配给一个变量。
我能够在控制台上打印到参数,当我调试时,我也尝试手工使用值本身,我仍然得到错误。
我错过了什么概念?我使用ruby 2.7.1和rails 6
"trace": "app/controllers/api/v1/users_controller.rb:27:in 'update'"
module Api
module V1
require 'authenticate_user'
class UsersController < ApplicationController
include AuthenticateUser
before_action :authenticate_user
before_action :set_user, only: [:show, :update, :destroy]
def update
if @user.update
json_response(UsersSerializer.new([@user], includable_params).as_json)
else
error_response(@user.errors, 422)
end
end
def destroy
@user.destroy!
head :no_content
end
private
def user_params
params.require(:user).permit(:first_name, :last_name, :email, :password)
end
def set_user
@user = User.find(params[:id])
end
end
end
end
您的问题似乎不在您的set_user
上,原因是您没有将任何参数传递给update
方法。您的更新操作应该如下所示:
def update
if @user.update(user_params) # <-- here was the problem
json_response(UsersSerializer.new([@user], includable_params).as_json)
else
error_response(@user.errors, 422)
end
end