Я хочу показать всплывающее окно, когда конкретная ошибка отображается на: base.Поэтому мне нужно указать клиентской стороне показывать всплывающее окно и некоторую другую информацию, которая будет использоваться во всплывающем окне в том же API.То, что я делаю, прекрасно работает, но у меня есть ощущение, что это не лучший способ добиться этого.
Итак, в моем API я также отправляю информацию, необходимую front-end для отображения всплывающего окна, когда какой-то конкретный типошибки выдаются.
{
"errors":
{
"base": ["Credit Limit Exceeding, Available Credit = 100.0"]
},
"popup_info":
{"show_credit_leeway_pop_up":true,
"required_leeway_amount":900,
"required_leeway_invoices": 0,
"required_leeway_days":0
}
}
Вот мой код для достижения этой цели: -
Где-то в контроллере
if @order.state != old_state
render json: @order, meta: {notice: t('api.orders.update_state.success')}, status: :ok
else
render json: {errors: @order.errors, popup_info: {show_credit_leeway_pop_up: @order.show_credit_leeway_pop_up, required_leeway_amount: @order.required_leeway_amount, required_leeway_invoices: @order.required_leeway_invoices, required_leeway_days: @order.required_leeway_days}}, status: :unprocessable_entity
end
Где-то в модели: -
class Order < ApplicationRecord
attr_accessor :show_credit_leeway_pop_up, :required_leeway_amount, :required_leeway_invoices, :required_leeway_days
def credit_control
if is_credit_limit_exceeding
errors.add(:base, "Credit Limit Exceeding, Available Credit = #{self.customer.available_credit_limit}")
self.show_credit_leeway_pop_up = true
self.required_leeway_amount = self.grand_total - self.customer.applicable_credit_limit
end
if is_invoice_limit_exceeding
errors.add(:base, "#{self.customer.invoices.open.length} open invoices are already present for this customer")
self.show_credit_leeway_pop_up = true
self.required_leeway_invoices = self.customer.open_invoices.length - self.customer.invoice_limit
end
if is_overdue_limit_exceeding = !self.customer.overdue_days_limit_available?
errors.add(:base, "open invoices with due date less than #{Date.current - self.customer.customer_rating.outstanding_days_limit} are present for this customer. ")
self.show_credit_leeway_pop_up = true
self.required_leeway_days = self.customer.maximum_outstanding_days - self.customer.outstanding_days_limit
end
(self.credit_control_check = (!is_invoice_limit_exceeding && !is_overdue_limit_exceeding && !is_credit_limit_exceeding) )
end
Мне нужно показывать popup_info только для определенного типа ошибок.Можно ли использовать виртуальные атрибуты, как я использую здесь?Есть ли лучший способ решить эту проблему?Можно ли отправлять другие данные с ошибками?