Проверка записи перед обновлением - PullRequest
0 голосов
/ 24 февраля 2019

Цель: Проверить, обновлена ​​ли уже запись, и разрешить или запретить обновление записи, если она уже была.

Это в случае, если покупательна странице, которая не имеет обновленной информации и пытается отменить заказ, как только он уже выполнен.

У меня есть следующий код, который работает, но также не работает правильно:

private

    def prevent_order_update
      @order = Order.find(params[:id])
      if ( @order.order_status[2] || @order.order_status[3] ) 
        redirect_to @order, notice: "Your request status for Order:#{@order.id} has already been updated."
      end
    end

с:

  before_action :prevent_order_update, :only => [:update]

Это работает, но также «работает», если :order_status равно 1, что не должно.

Я хочу, чтобы в обновлении был только блок, ЕСЛИ статус заказа не равен 1.

Статус заказа соответствует номеру модели 1,2,3.

Iтакже пытались использовать:

if ( @order.order_status[2] || @order.order_status[3] ) && @order.order_status_previously_changed?

, который полностью блокирует prevent_order_update от совместной работы.

И:

( @order.order_status[2] || @order.order_status[3] ) != @order.order_status[1]

, который затем блокирует мой метод обновления все вместе и по-прежнему выдает уведомление о методе prevent_order_update при заказестатус 1

Ответы [ 2 ]

0 голосов
/ 25 февраля 2019

Вы можете использовать aasm gem, так что вам не нужно никаких before_action.Вы можете решить это на уровне модели, используя переходы AASM

https://github.com/aasm/aasm

0 голосов
/ 25 февраля 2019

@order.order_status соответствует строке, когда дело доходит до перечислений рельсов.В вашем случае, скажем, @order.order_status это charged.Когда вы выполняете @order.order_status[2], на самом деле выдается a, который является третьим элементом строки charged.В этом случае сравнение всегда возвращает true.Поэтому попробуйте следующий код:

    def prevent_order_update
      @order = Order.find(params[:id])
      if ( @order.charged? || @order.canceled? ) 
        redirect_to @order, notice: "Your request status for Order:#{@order.id} has already been updated."
      end
    end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...