目标:要检查记录是否已更新,是否允许更新记录。
这是为了防止买家在没有更新信息的页面上尝试在完成订单后取消订单。
我有以下代码,它可以工作,但不能正常工作:
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的模型枚举。
我也尝试使用:
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
方法通知
答案 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转换在模型级别解决它