Rails: как отправить другие данные для следующего всплывающего окна с ошибками - PullRequest
0 голосов
/ 20 сентября 2018

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...