(Rails 5.2) Моя запись с JSON корректно сохраняется в базе данных (Postgres 9.4) на CREATE, но переформатируется после UPDATE, с возвратом каретки (\ r) и символами новой строки (\ n), появляющимися в базе данных после UPDATE.
Столбец : budget_json имеет тип jsonb .
Вот моя (упрощенная) модель бюджета:
class Budget < ApplicationRecord
after_initialize :create_shell_json
def create_shell_json
self.budget_json = blank_budget if self.new_record?
end
def blank_budget
{
id: nil,
name: nil,
year: nil,
[etc...]
}
end
end
Вот мой контроллер:
def new
@budget = Budget.new(year: Time.now.year)
end
def create
@budget = Budget.new(budget_params)
@budget.budget_json = JSON.parse(budget_params[:budget_json])
if @budget.save
redirect_to admin_budgets_path, notice: "Budget successfully created."
else
render :new
end
end
def edit
@budget = Budget.find(params[:id])
end
def update
@budget = Budget.find(params[:id])
@budget.budget_json = JSON.parse(budget_params[:budget_json])
if @budget.update(budget_params)
redirect_to admin_budgets_path, notice: "Budget successfully updated."
else
render :edit
end
end
А вот и соответствующие части формы. (Форма одинакова для CREATE и UPDATE.) TEXTAREA содержит редактируемый JSON, если пользователь хочет изменить значения по умолчанию:
<%= form_with model: [:admin, @budget], local: true, :html => {:class => "form-horizontal"} do |f| %>
...
<div class="form-group">
<div class="col-sm-2">
<%= f.label :budget_json %>
</div>
<div class="col-sm-2">
<%= text_area_tag "budget[budget_json]", JSON.pretty_generate(@budget.budget_json), id: "budget_budget_json" %>
</div>
</div>
...
<% end %>
FWIW, форма выглядит так:

Как вы можете видеть здесь (из pgAdmin), первая запись (id: 166) является чистой и пригодной для использования. Это только что было создано. Вторая запись (id: 167) непригодна для использования, так как вместо этого была сохранена как строка:
Что мне не хватает?