Как визуализировать ошибки как вложенный хэш вместо одноуровневого хеша при использовании accepts_nested_attributes_for? - PullRequest
0 голосов
/ 29 июня 2018

В моем приложении на 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"
                ]   
            }
        ]
    }
}

Как мне этого добиться?

1 Ответ

0 голосов
/ 25 июля 2018

Не нашел стандартного способа сделать это, поэтому я решил его с помощью своего собственного парсера.

...