В моем приложении на Rails есть две модели с отношениями has_many / own_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
Я хочу реализовать create
метод для Farmer
, который также будет создавать вложенных животных.
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
и, если проверка не удалась, метод возвращает хэш ошибок. Поэтому, когда я пытаюсь создать фермера со следующим 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"
]
}
]
}
}
Как мне этого добиться?