【问题标题】:Accept JSON in Rails Controller when wrong format格式错误时在 Rails 控制器中接受 JSON
【发布时间】:2014-01-25 20:44:44
【问题描述】:

我的注册控制器中有以下内容:

class Api::V1::RegistrationsController  < ApplicationController

  skip_before_filter :verify_authenticity_token
  respond_to :json

  def create

    user = User.new(params[user_params])

    if user.save
      render :json => user.as_json(:auth_token=>user.authentication_token, :email=>user.email), :status=>201
      return
    else
      warden.custom_failure!
      render :json => user.errors, :status=>422
    end
  end

  def user_params
    params.require(:user).permit(:email, :password, :name, :phone, :acknowledgement)
  end

end

我意识到这期望我的 JSON 格式为

{user:{email:user@example.com,name:"anotheruser"}}

但是 JSON 被发送为

{email:user@example.com, name:"anotheruser"}

我不知道如何定位这些参数。它的语法是什么? 另外,有没有一种特殊的方法来处理这种格式?

【问题讨论】:

    标签: ruby-on-rails json devise


    【解决方案1】:

    你得到的预期 json 将是一个哈希值,但你只是得到一个哈希值,听起来是这样的。

    鉴于此,您不需要 :user ,因为 :user 不存在。就这样做吧。

    params.permit(:email, :password, :name, :phone, :acknowledgement) if params.present?

    在场?将检查以确保 params 不是 nil 或空白/空。如果你愿意,你可以提出一个错误,如果现在?检查失败。

    【讨论】:

    • 检查我的更新。一开始我误解了这个问题。我以为您在访问散列中的散列时遇到问题。现在我看到你只有一个散列,而不是散列的散列。如果您所拥有的只是一个散列,则不要指望散列的散列。您得到了您所做的,因为 require(:user) 没有找到 :user 密钥,并且您说您实际收到的 json 支持这一点。
    • 如果你认为你有时可能会得到一个用户哈希的哈希值:key,那么你可以做一些类似... if params.present? if params[:user] params[:user].permit(...) else params.permit(...) end end
    • 那行得通。如果我使用,也可以使用: params.require[:registration].permit(:email, :password, :name, :phone, :acknowledgment) 因为 rails 似乎也将散列包装在控制器的名称中
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-12
    • 1970-01-01
    • 2018-03-14
    • 1970-01-01
    • 2011-08-30
    • 1970-01-01
    相关资源
    最近更新 更多