使用ajax请求发回自定义JSON响应

时间:2018-02-23 16:17:51

标签: ruby-on-rails json ruby

我正在尝试将用户信息从后端发送回前端,但我很难理解这应该如何格式化。

CONTROLLLER

  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

问题在于成功之路。当我尝试运行测试时,它给了我这个错误。

ERROR:

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 '}'

TEST:

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

它说有一个语法错误,但对于我的生活,我看不出我做错了什么。有人可以帮忙吗?谢谢。

2 个答案:

答案 0 :(得分:1)

问题在于:

render json: auth_token, created_user

语法不正确。可能(根据你的测试)你想要的东西是:

render json: { user: created_user, jwt: auth_token.token)

More info

答案 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一样呈现输出。