使用accepts_nested_attributes_for在表单中进行了哪些更改

时间:2012-09-22 07:10:57

标签: ruby-on-rails forms field nested-attributes

关于这篇文章: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

(模特非常正常)。

有什么想法吗?如果我被迫映射哈希,请问一些关于如何做的示例?

提前致谢

1 个答案:

答案 0 :(得分: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. 使用changues,然后保存等等。