【问题标题】:render two different model errors in JSON在 JSON 中呈现两个不同的模型错误
【发布时间】:2016-06-08 13:31:53
【问题描述】:

我有一个远程表单,它本质上是在一个表单中提交两个表单。一个用于Address 另一个用于User 现在我想做的是在 JSON 中呈现错误。

我可以像这样单独返回错误:

if current_user.errors.any? || !@address.save
  respond_to do |format|
    format.json { render json: @address.errors, status: :unprocessable_entity }
  end
end

现在出现了在用户模型和地址上触发错误的情况。我怎样才能呈现@address.errorscurrent_user.errors 这两个错误。我试图将它们合并为哈希,但由于它们属于 ActiveModel::Errors 它无法这样做。如果您检查它,通常会返回这样的错误:

#<ActiveModel::Errors:0x007fbe094edda0 @base=#<Address id: nil, street_address: "Lorem ipsum", city: nil, state: nil, zip_code: "0000", country: nil, user_id: 1, created_at: nil, updated_at: nil, latitude: 10.92876, longitude: 52.23023, trashed: false>, @messages={:zip_code=>["No zip code matches this"]}, @details={:zip_code=>[{:error=>:inclusion, :value=>"0000"}]}>

所以我想弄清楚是否有办法将它合并为一个,所以我可以返回它。

【问题讨论】:

  • 地址和用户有关系吗?

标签: ruby-on-rails json error-handling


【解决方案1】:

怎么样:

if current_user.errors.any? || !@address.save
  respond_to do |format|
    format.json { render json: {address_errors: @address.errors, current_user_errors: current_user.errors}, status: :unprocessable_entity }
  end
end

现在你有一个 json 响应,它是一个包含 2 个条目的哈希:一个用于 address_errors,一个用于 current_user_errors。

【讨论】:

    【解决方案2】:

    你可以试试这个:

    format.json { render json: { @address.errors, @user.errors }, status: :unprocessable_entity }
    

    【讨论】:

      猜你喜欢
      • 2021-10-04
      • 1970-01-01
      • 2018-02-01
      • 2015-06-17
      • 1970-01-01
      • 2020-10-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多