加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby-on-rails – ActiveRecord验证中属性的新旧值

发布时间:2020-12-17 02:56:22 所属栏目:百科 来源:网络整理
导读:在 Ruby中,我如何运行一个验证,如果它曾经是Y,那么模型属性只能是X?该示例将是正在进行或完成的属性状态.我想说当用户标记对象状态时,它总是可以标记为进行中,但只有在第一次标记为进行中时才能标记为完成. validate :status_changedef status_change unles
在 Ruby中,我如何运行一个验证,如果它曾经是Y,那么模型属性只能是X?该示例将是正在进行或完成的属性状态.我想说当用户标记对象状态时,它总是可以标记为进行中,但只有在第一次标记为进行中时才能标记为完成.

validate :status_change

def status_change
  unless self.status == "complete" && #here i want to say self.status used to be "in progress" 
    errors[:base] << "Can only mark object complete after it was first marked in progress"
  end
end

解决方法

请考虑使用 ActiveModel::Dirty

它提供了跟踪这些更改的方法.

before_update :status_change

def status_change
  unless status == "complete" && status_was == "in-progress" 
    errors[:base] << "Can only mark object complete after it was first marked in progress"
  end
end

此外,它不需要使用自我.关键字在这里

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读