现在,如果我非常快速地粉碎这个“销售”按钮,以便html没有时间更新,我可以连续销售相同的物品并获得每次点数,我该如何防止这种情况?防止快速按钮砸
方法用户模型:
has_many :drivers
def withdraw(amount)
balance = self.credit
if balance >= amount
new_balance = balance - amount
self.update credit: new_balance
true
else
false
end
end
def deposit(amount)
balance = self.credit
balance += amount
self.update credit: balance
end
def purchase(package)
cost = package.cost
ActiveRecord::Base.transaction do
self.withdraw(cost)
package.update user_id: self.id
end
end
def sell(package)
cost = package.cost
ActiveRecord::Base.transaction do
self.deposit(cost)
package.update user_id: nil
end
end
视图,买入/卖出按钮:
<% unless @driver.owned? %>
<%= button_to "Buy", purchase_driver_path %>
<% else %>
<%= button_to "Sell", sell_driver_path, method: :delete %>
<% end %>
我的控制器
class DriversController < ApplicationController
def show
@user = current_user
@driver = Driver.find(params[:id])
end
def purchase
@driver = Driver.find(params[:id])
@user = current_user
if @user.purchase(@driver)
flash[:succes] = "Purchase succesful!"
else
flash[:error] = "Error"
end
render "show"
end
def sell
@driver = Driver.find(params[:id])
@user = current_user
if @user.sell(@driver)
flash[:succes] = "Sell succesful!"
else
flash[:error] = "Error"
end
render "show"
end
end
谢谢!
您好,感谢您的回复,但可能只是人们解释“!user_id_change [0] == nil”测试的内容?然后,“package.update user_id:self.id”然后是“package.user_id = self.id package.save(context::purchase)” – manis
!user_id_change [0] == nil应该是什么区别user_id_change [0]!=无 – Woahdae
这是说“如果ID从一个ID更改为另一个,这是无效的”。 user_id_change是一个动态定义的方法,它返回[from-value,to-value]的数组。请参阅“活动记录脏对象”文档(在我的手机上,或者我会链接到它) – Woahdae