【问题标题】:Trouble getting user AND token in Rails Controller在 Rails 控制器中获取用户和令牌时遇到问题
【发布时间】:2019-04-03 14:35:09
【问题描述】:

我尝试在 Postman 中测试发布请求以创建用户,但在尝试创建用户时我的控制器中不断出现错误。我根本没有得到我的令牌。这是我的代码。

class Api::V1::UsersController < ApplicationController
  skip_before_action :authorized, only: [:create]

  def create
    @user = User.create(user_params)
    if @user.valid?
      @token = encode_token(user_id: @user.id)
      render json: {
        @user => include: [:categories, :resources],
        jwt: @token
      }, status: :created
    else
      render json: { error: 'failed to create user' }, status: :not_acceptable
    end
  end

  private
  def user_params
    params.permit(:username, :email, :password, :password_confirmation)
  end

end

这些是我得到的错误:

SyntaxError (/Users/flatironschool/Desktop/5-Module/houston-helper-backend/app/controllers/api/v1/users_controller.rb:8: 语法错误,意外 => 渲染 json: => { ^~ /Users/flatironschool/Desktop/5-Module/houston-helper-backend/app/controllers/api/v1/users_controller.rb:9:语法错误,意外':',期待'}' @user => 包括:[:categories, :resources] ^ /Users/flatironschool/Desktop/5-Module/houston-helper-backend/app/controllers/api/v1/users_controller.rb:10:语法错误,意外'}',期待keyword_end },jwt:@token,状态::创建... ^):

app/controllers/api/v1/users_controller.rb:8:语法错误,意外 => app/controllers/api/v1/users_controller.rb:9:语法错误,意外':',期待'}' app/controllers/api/v1/users_controller.rb:10:语法错误,意外'}',期待keyword_end

【问题讨论】:

  • 能否分享一下错误信息或控制台日志??
  • 你得到了哪些错误,你能在代码中显示它们吗?
  • 您是否使用 ActiveModel Serializer 之类的工具来序列化您的模型?
  • 我添加了错误。这次我没有使用序列化程序。我只是用“包括:”代替。我试图一次修复一个语法错误,但它只是给了我新的语法错误。我试图查找我所写内容的正确语法,但没有找到任何有效的示例。

标签: ruby-on-rails ruby


【解决方案1】:

你的主要问题是

{
    @user => include: [:categories, :resources],
    jwt: @token
  }

因为它不是一个有效的哈希值。看看如何创建hashes in ruby

我建议逐步建立您的响应,直到您拥有所需的内容。 开始

render json: @token

然后你可以尝试类似的东西

render json: {user: @user.to_json, token: @token.to_json }

然后随便你!

【讨论】:

  • 其实它是一个有效的哈希。尽管它不经常使用,但您可以将任何对象用作 ruby​​ 中的哈希键。例如,尝试@hash = { foo: :bar }; { @hash =&gt; 'baz' }[@hash]。所以它是一个有效的 ruby​​ 哈希 - 它只是 render json: 的无效输入。
【解决方案2】:

你需要替换你的代码

render json: {
    @user => include: [:categories, :resources],
    jwt: @token
  }, status: :created

render json: {
    user: @user.as_json(include: [:categories, :resources]),
    jwt: @token
  }, status: :created

如果需要,您也可以使用单独的 activemodel 序列化程序,但是 as_json 是 rails 提供的 activemodel 对象的内置序列化程序。您可以通过here了解更多信息

希望这会有所帮助!

【讨论】:

    猜你喜欢
    • 2022-01-27
    • 2019-03-18
    • 1970-01-01
    • 2017-04-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-04
    • 1970-01-01
    相关资源
    最近更新 更多