使用 accepts_nested_attributes_for 时如何将错误呈现为嵌套哈希而不是单级哈希?
How to render errors as nested hash instead on single-level hash when using accepts_nested_attributes_for?
在我的 Rails 应用程序中,我有两个具有 has_many/belongs_to 关系的模型 - Farmer
和 Animal
。
class Farmer
has_many :animals
accepts_nested_attributes_for :animals
end
class Animal
belongs_to :farmer
validates_numericality_of :age, less_than: 100
end
我想为 Farmer
实现 create
方法,该方法也将创建嵌套动物。
class FarmerController < ApplicationController
def create
@farmer = Farmer.new(farmer_params)
if @farmer.save
render json: @farmer
else
render json: { errors: @farmer.errors }, status: :unprocessable_entity
end
end
private
def farmer_params
params.require(:farmer).permit(
:name,
{ animals_params: [:nickname, :age] }
)
end
end
Animal
验证 age
字段,如果验证失败,方法 returns 错误散列。因此,当我尝试使用以下 json
创建农民时
{
"farmer": {
"name": "Bob"
"animals_attributes: [
{
nickname: "Rex",
age: 300
}
]
}
}
我收到这个错误:
{
"errors": {
"animals.age": [
"must be less than 100"
]
}
}
但我想将错误作为嵌套哈希(前端要求的原因),就像这样:
{
"errors": {
"animals":[
{
age: [
"must be less than 100"
]
}
]
}
}
我怎样才能做到这一点?
没有找到标准的方法,所以我用自己的解析器解决了。
在我的 Rails 应用程序中,我有两个具有 has_many/belongs_to 关系的模型 - Farmer
和 Animal
。
class Farmer
has_many :animals
accepts_nested_attributes_for :animals
end
class Animal
belongs_to :farmer
validates_numericality_of :age, less_than: 100
end
我想为 Farmer
实现 create
方法,该方法也将创建嵌套动物。
class FarmerController < ApplicationController
def create
@farmer = Farmer.new(farmer_params)
if @farmer.save
render json: @farmer
else
render json: { errors: @farmer.errors }, status: :unprocessable_entity
end
end
private
def farmer_params
params.require(:farmer).permit(
:name,
{ animals_params: [:nickname, :age] }
)
end
end
Animal
验证 age
字段,如果验证失败,方法 returns 错误散列。因此,当我尝试使用以下 json
{
"farmer": {
"name": "Bob"
"animals_attributes: [
{
nickname: "Rex",
age: 300
}
]
}
}
我收到这个错误:
{
"errors": {
"animals.age": [
"must be less than 100"
]
}
}
但我想将错误作为嵌套哈希(前端要求的原因),就像这样:
{
"errors": {
"animals":[
{
age: [
"must be less than 100"
]
}
]
}
}
我怎样才能做到这一点?
没有找到标准的方法,所以我用自己的解析器解决了。