【发布时间】:2016-04-27 20:13:43
【问题描述】:
我决定将我的应用程序上的销毁功能更改为仅将状态字段切换为 false(索引和显示操作仅显示状态为 true 的结果)。
好吧,我已经改变了这一点,一开始它可以工作,但现在它只是在完成提交之前“回滚”......
控制器销毁:
def destroy
@customer = Customer.find(params[:id])
@contact = @customer.contacts
@adress = @customer.adresses
if @customer.delete(current_user)
@contact.each do |f|
f.delete(current_user)
end
@adress.each do |g|
@telephone = g.telephones
@telephone.each do |t|
t.delete(current_user)
end
g.delete(current_user)
end
flash[:success] = "Cliente excluído"
else
flash[:danger] = "Erro! O cliente não foi excluído."
end
redirect_to customers_path
end
模型删除:
def delete(user_id)
update_attributes(status: false, changed_by: user_id, deleted_at: Time.now, updated_at: Time.now)
end
除此之外,我将 :destroy 方法仅限于管理员(这是正确的方法吗?为什么不删除?)
谢谢!
【问题讨论】:
-
你可以使用 paranoia gem 来实现这个功能
-
将
update_attributes(...)更改为update_attributes!(...)并重试。update_attributes!会在更新失败时引发异常。该异常会告诉您更新失败的原因(通常是验证失败)。 -
不,它不正确,它完全不好!你的数据库关联是什么?
-
不是为了打败一匹死马,而是覆盖删除功能感觉就像是代码味道。如果您想要软删除,我会查看 paranoid gem 或至少使用更恰当命名的方法。
标签: ruby-on-rails ruby destroy