ruby-on-rails-3 - 如何 "lock"一条记录不被更新或删除?

标签 ruby-on-rails-3 activerecord locking

我有一个模型 User它自动有一个 Task生成。

我想禁止编辑或删除此任务。

我需要对我的 Controller 进行哪些修改?是否有一个优雅的解决方案,或者我是否需要在每次编辑/销毁时检查它是否是有问题的任务。

最佳答案

您可以使用验证来很好地做到这一点。

class Thing < ActiveRecord::Base
  validate :locked_cannot_be_modified

  private

  def locked_cannot_be_modified
    errors.add(:base, "Entry is locked") if changes.any? && whatever_logic_makes_it_locked
  end
end

或者,您可以实现只读?在模型上:
class Thing < ActiveRecord::Base
  def readonly?
    whatever_logic_makes_it_locked || super
  end
end

这种方法将引发异常而不是验证错误。我想这取决于你想要做什么,哪种方法更好。

关于ruby-on-rails-3 - 如何 "lock"一条记录不被更新或删除?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7183740/

相关文章:

sql - 事件记录查询。按多个表中的多列分组

sql - NOLOCK 和 UNCOMMITTED 之间有什么区别

Python 错误锁

ruby-on-rails - rails 上的 Assets 管道和@font-face(rails 3.2.3)

jquery - 如何在ajax url中调用 Controller 操作

mysql - 从两个表中获取数据

java - 同步: multiple locks - create lock objects?

ruby-on-rails-3 - 为特定模型自定义 rails_admin 删除操作

ruby-on-rails - ActiveRecord#save : `retry` breaks "autosave" for associations

ruby-on-rails - 更改 Rails 对象的列名