2

我有 2 个模型:

class Invoice < ActiveRecord::Base
 has_many :invoice_items
 accepts_nested_attributes_for :invoice_items, :allow_destroy => true

end

class InvoiceItem < ActiveRecord::Base
  attr_accessor :encryption_key                  
  belongs_to :invoice     
end

发票项目的列是加密的,我使用来自会话的加密密钥。我不希望将此密钥存储在服务器或任何其他模型中。

从控制器:

params[:invoice][:invoice_items_attributes].each_value {
   |v| v.merge!(:encryption_key => session['access_key']) 
}           
@invoice = Invoice.new(params[:invoice])

这会将密钥放入属性列表中,但在创建发票时不会将其传递给 InvoiceItems 模型......

任何有关如何使其工作的指示都会很棒。

4

1 回答 1

2

问题是,由于字段是虚拟属性,您需要通过发票项目模型的字段的 setter 方法,因此您将不得不手动编写解决方案,而不是依赖嵌套属性。

实现这一点的一种方法是创建一个特定的方法来处理发票模型类上的发票项目。您可以将参数传递给该方法并处理在该方法中创建/查找发票项目,将参数分配给处理 invoice_item 类上的加密的正确设置方法,然后直接从控制器调用该方法。

于 2011-08-08T12:30:59.803 回答