我正在尝试将用户信息从后端发送回前端,但我很难理解这应该如何格式化。
def create
user = User.new(user_params)
if user.save
auth_token = Knock::AuthToken.new(payload: { sub: user.id })
created_user = {
userEmail: user.email,
userID: user.id
}
respond_to do |format|
format.json { render json: auth_token, created_user }
end
else
respond_to do |format|
format.json { render json: { errors: user.errors.full_messages }, status: :unprocessable_entity }
end
end
end
问题在于成功之路。当我尝试运行测试时,它给了我这个错误。
SyntaxError:
/Users/Desktop/Work/ping-party/app/controllers/api/v1/users_controller.rb:23: syntax error, unexpected '}', expecting =>
/Users/Desktop/Work/ping-party/app/controllers/api/v1/users_controller.rb:29: syntax error, unexpected keyword_end, expecting '}'
/Users/Desktop/Work/ping-party/app/controllers/api/v1/users_controller.rb:37: syntax error, unexpected keyword_end, expecting '}'
context "POST /v1/users" do
it "create a new user" do
post '/api/v1/users',
params: {
user: {
email: "test@idea.com",
password: "password123"
}
}
res = JSON.parse(response.body)
binding.pry
expect(res).to include("jwt")
expect(res).to include("user")
expect(User.count).to eq(1)
end
end
它说有一个语法错误,但对于我的生活,我看不出我做错了什么。有人可以帮忙吗?谢谢。
答案 0 :(得分:1)
问题在于:
render json: auth_token, created_user
语法不正确。可能(根据你的测试)你想要的东西是:
render json: { user: created_user, jwt: auth_token.token)
答案 1 :(得分:1)
您可以将auth_token和created_user存储在哈希中:
auth_token = Knock::AuthToken.new(payload: { sub: user.id })
created_user = {
userEmail: user.email,
userID: user.id
}
output = { auth_token: auth_token, created_user: created_user }
...
format.json { render json: output }
然后rails可以像json一样呈现输出。