更新前检查记录

时间:2019-02-24 20:32:05

标签: ruby-on-rails ruby

目标:要检查记录是否已更新,是否允许更新记录。

这是为了防止买家在没有更新信息的页面上尝试在完成订单后取消订单。

我有以下代码,它可以工作,但不能正常工作:

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_status1,则该方法有效。

如果订单状态为1之外,我只希望更新中有一个块。

订单状态来自1,2,3的模型枚举。

我也尝试使用:

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 :(得分:1)

User::find($id)->boards Board::find($id)->members Board::with('members')->find($id) 对应于Rails枚举。 就您而言,假设class Wallet private (val privateKey: PrivateKey, publicKey: PublicKey, balance: Int) { def getBalance(): Int = balance } object Wallet { def apply(): Wallet = { val keyPair = KeyPairGenerator.getInstance("SHA-256").generateKeyPair() val privateKey = keyPair.getPrivate val privateKey = keyPair.getPublic new Wallet(privateKey, privateKey, 0) } } @order.order_status。当您执行@order.order_status时,实际上会产生charged,它是@order.order_status[2]字符串的第三项。在这种情况下,比较总是返回true。 因此,请尝试以下代码:

a

答案 1 :(得分:0)

您可以使用aasm gem,这样就不需要任何before_action。您可以使用Aasm转换在模型级别解决它

https://github.com/aasm/aasm