#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
andunless
. Я также не понимаю, как вы ожидаете такого результата при рендеринге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 действительно понял ваш вопрос, предоставьте полный пример запущенного кода и, кроме журналов, показывающих запрос. Вы не можете ожидать, что мы будем что-то делать только с половиной картинки.