заполнить вложенный json из postman в rails

#ruby-on-rails #json #ruby

#ruby-on-rails #json #ruby

Вопрос:

Я новичок в rails, у меня есть приложение rails, которое позволяет пользователю создавать группу фильтров со следующим API

 def create
    @filter_group = ::FilterGroup.new(filter_group_params.merge(user: current_user))
    return render json: {errors: filter_group.errors},  status: 400 unless @filter_group.save

    render json: { message: "Filter Group successfully created." }, status: :created
  end
 

и это мои параметры

  def filter_group_params
    params.permit(:name, :filters, :app_id)
  end
 

это моя модель

 class FilterGroup < ApplicationRecord
  serialize :filters, Hash
  validates_each :filters do
    validates :filter, presence: true
  end
  belongs_to :user
  belongs_to :app
end
 

я ожидаю, что результат моего api должен быть примерно таким

 {
    "filter_group": [
        {
            "id": 11,
            "filters": {"Gail": "Jesse", "Brandon": "Lynn", "Loraine": "Agueda", "Marya": "Dennis"},
            "name": "name"
        }
    ]
}
 

но моя проблема в index api заключается в том, что, когда я хочу проиндексировать свой результат, внутренний json, который был заполнен в create api, не заполняется, и показывает что-то вроде этого

 {
    "filter_group": [
        {
            "id": 11,
            "filters": {},
            "name": "name"
        }
    ]
}
 

не могли бы вы сказать мне, в чем моя ошибка?

Комментарии:

1. Этот код довольно сложно прочитать, поскольку ключевая логика скрыта в конце чрезвычайно длинной строки. Было бы лучше, если бы вы использовали if @filter_group.save ... else ... end вместо return and unless . Я также не понимаю, как вы ожидаете такого результата при рендеринге json: { message: "Filter Group successfully created." }

2. Вы также, скорее всего, не хотите использовать serialize . Это хак для древних баз данных, который включает в себя использование столбца varchar для хранения сериализованных объектов ruby. Если вы используете современную базу данных, поддерживающую типы JSON / JSONB, драйвер будет обрабатывать сериализацию.

3. @max Я думаю, что мое описание делает вас неправильным, у меня есть два разных API, которые сначала я должен создать filter_group в create api, а затем ожидать первого результата в index api, но я получил второй результат в index api — о чтении, которое вы рассказываете, я стараюсь следить за написанием вручнуюпроект — и о «сериализации» я не знал об этом, я меняю свой код, спасибо

4. Что ж, если вы хотите, чтобы ppl действительно понял ваш вопрос, предоставьте полный пример запущенного кода и, кроме журналов, показывающих запрос. Вы не можете ожидать, что мы будем что-то делать только с половиной картинки.