0

关于这篇文章:tracking activerecord objects

我需要知道使用accepts_nested_attributes_for 以大形式更改了哪些字段。

目前,该表格按预期运作良好。但除此之外,我还在做关于用户更改的“日志历史记录”。

我已经尝试过哈希映射,但对我来说真的很复杂,因为模型不小,谈论上面的文章可能存在更好的跟踪变化的方法。

我的模型是(以防万一):

class Customer < ActiveRecord::Base
  has_many   :addresses

  attr_accessible :nom, :prenom, :langue, :nationalite, :codeFiscal, :hidden_status, :subscribed
  attr_accessible :addresses_attributes, allow_destroy: true

  accepts_nested_attributes_for :addresses
end


class Address < ActiveRecord::Base
  belongs_to :customer
  has_many   :telephones

  attr_accessible :flag, :societe, :titre, :persContact, :rue, :rue1, :nopostal, :lieu, :pays
  attr_accessible :hidden_status
  attr_accessible :telephones_attributes

  accepts_nested_attributes_for :telephones, :reject_if => :all_blank, :allow_destroy => true
end


class Telephone < ActiveRecord::Base
  belongs_to :address

  attr_accessible :typeNumero, :numeroTel
end

(型号很正常)。

有什么想法吗?如果我被迫映射哈希,你有关于如何做的小样本吗?

提前致谢

4

1 回答 1

0

经过几个选项(感谢Beerlington)和我想要的上面相同的文章:

阅读:ActiveRecord::Dirty

def update
    @customer = Customer.find(params[:id])
    @customer.assign_attributes(params[:customer])
    if @customer.valid?
      # If changued I revise the record in the model
      @customer = @customer.requires_log if @customer.changed?
      # and very useful: @customer.changes gives you an array con every changue
      @customer.save
    end
    # similar for addresses and phones but into a loop:
    # @customer.addresses.each do |address|   ...  end
    # I didn't put it because it is repetitive
  end

该过程中的重要事项是:

  1. 要应用 assign_attributes 而不是保存以在保存前跟踪更改。
  2. 在这种特殊情况下适用有效吗?只跟踪正确的变化。
  3. 使用变更,然后保存等。
于 2012-10-16T02:24:33.890 回答