ruby-on-rails - rails : attribute_changed?

标签 ruby-on-rails

我有一个带有 amount 的模型我正在跟踪查看此金额是否随 Model.amount_changed? 发生变化与 before_save这工作正常,但是当我查看 amount_was 时和 amount_change?它只返回更新的金额而不是以前的金额。而这一切都发生在它被保存之前。它知道何时更改属性,但不会返回旧值。

想法?

class Reservation < ActiveRecord::Base

before_save  :status_amount, :if => :status_amount_changed

def status_amount_changed
  if self.amount_changed? && !self.new_record?
    true
  else
    false
  end
end

def status_amount
    title = "Changed Amount"
    description = "to #{self.amount_was} changed to #{self.amount} units"
    create_reservation_event(title, description)
end

def create_reservation_event(title, description)
    Event.create(:reservation => self, :sharedorder => self.sharedorder, :title => title,     :description => description, :retailer => self.retailer )
end

end

最佳答案

如果您想跟踪模型中的更改,Rails 提供 "Dirty Objects" .
例如。您的型号有 name属性:

my_model = MyModel.find(:first)
my_model.changed?  # it returns false

# You can Track changes to attributes with my_model.name_changed? accessor
my_model.name  # returns  "Name"
my_model.name = "New Name"
my_model.name_changed? # returns true

# Access previous value with name_was accessor
my_model.name_was  # "Name"

# You can also see both the previous and the current values, using name_change
my_model.name_change  #=> ["Name", "New Name"]

如果要将旧值存储在数据库中,可以使用:
  • 模型属性 amount
  • 方法 _是 换句话说:在上述属性上:amount_was检索 的值金额在改变之前。

  • 您可以在 update_attributes 期间保存两者称呼。
    否则,如果您不需要 amount_was历史,你可以只使用两个实例变量。

    如果你需要更多的东西,比如跟踪你的模型历史,Rails 有一个很好的专用插件。
    至于其他不错的话题瑞恩贝茨谈论我here: Railscasts #177

    关于ruby-on-rails - rails : attribute_changed?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2942162/

    相关文章:

    ruby-on-rails - RoR : NameError: Uninitialized constant (Service)

    ruby-on-rails - 如何为 Rails 3.2 中的每个请求重新加载 gem?

    ruby-on-rails - 带有负载平衡机的回形针 + rails

    ruby-on-rails - rails 4 : what is wrong with this method?

    ruby-on-rails - 在RSpec请求中 stub 方法调用的正确方法

    ruby-on-rails - 如何在 Rails 6 中请求自定义 JS 文件

    mysql - 如何使用 Rails 5 迁移在 MySQL 中添加 JSON 列

    html - 将单选按钮更改为实际按钮 - Ruby on Rails Simple Form Gem

    ruby-on-rails - will_paginate 增量表id

    ruby-on-rails - 在项目管理器应用程序中测试创建新项目的最佳方法