【问题标题】:Check format of JSON in Rails API or not?在 Rails API 中检查 JSON 的格式?
【发布时间】:2014-05-07 16:28:26
【问题描述】:

我正在使用 Rails 4 设计一个 API,现在我的 Orders 控制器的创建操作有以下内容:

def create
    begin
      @order = @api_user.orders.create!(order_params)
      render :json => @order, :only => [:id], :status => :created, :location => @order
    rescue
      render :json => {}, :status => :unprocessable_entity
    end
  end

有了这个,我要求用户发送一个如下所示的 JSON:

{"order" : {"description_1" : "Neque porro quisquam", "description_2" : "Neque porro quisquam", "types_attributes" : [{"url" : "http://test.com"}]}}

所以,我要做的就是检查参数:

params.require(:order).permit(:description_1, :description_2, {types_attributes: [:url]})

我的问题是:

如果我想避免用户必须在 JSON 参数中指定“订单”键,我将如何调用创建操作?我需要orders.create!(key1: params[:key1],...)吗?

解决这个问题的常用方法是什么?

【问题讨论】:

    标签: ruby-on-rails json api


    【解决方案1】:

    如果params 包含Order 的属性,那么您只需要使用:

    @order = @api_user.orders.create!(params)
    

    【讨论】:

    • 但是有办法去检查这些参数是否有可能的错误格式吗?还是我应该尝试创建它?
    • 我将依靠您的强大参数设置和 AR 验证来检查数据。如果这些失败(使用 create!),您将收到异常。
    • 假设我想让用户给我一个关联的ID,显然我需要获取这些ID并确保它们存在于数据库中。那么检查JSON有意义吗?
    • 是的,这很聪明。不过,我会通过自定义验证来做到这一点,以便将逻辑与其余验证合并到您的模型中。如果其中一个 ID 无效,您可以检查关联 ID 的存在并添加到错误哈希(:base 或关联)。
    猜你喜欢
    • 2016-12-04
    • 2016-10-15
    • 2015-03-21
    • 2020-09-26
    • 2012-10-03
    • 2013-01-17
    • 2017-01-04
    • 1970-01-01
    • 2023-03-28
    相关资源
    最近更新 更多