仅通过定义的方法而不是默认方法更新模型的属性

时间:2015-07-15 21:21:23

标签: ruby-on-rails ruby

我有一个名为“MyModel”的模型,它具有名为“status”的属性。 我可以像这样更新这个属性:   model.status =“new”   model.save!

但是,我使用自己的模型方法“update_status”覆盖此更新方法。除非使用“update_status”

,否则通过默认更新的任何更新都将被拒绝

1 个答案:

答案 0 :(得分:0)

您当然可以做的是跟踪已更改的属性,并仅过滤您希望在before_update回调中允许更新的属性。在update_status方法中,您可以通过update_column使用不会触发回调的分配。

  before_update :prevent_status_update

  private
  def prevent_status_update
    return true unless self.changed.includes? 'status'
    self.errors.add_to_base "Cannot update a #{ self.to_s }"
    false
  end