在JSON中渲染两个不同的模型错误

时间:2016-06-08 13:31:54

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

我有一个远程表单,它基本上将两个表单一起提交。一个用于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"}]}>

所以我想弄清楚的是,如果有办法将其合并为一个,那么我可以回复它。

2 个答案:

答案 0 :(得分: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。

答案 1 :(得分:0)

你可以试试这个:

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