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

問題は、フィールドが仮想属性であるため、請求書項目モデルのフィールドのセッター メソッドを使用する必要があるため、ネストされた属性に依存するのではなく、ソリューションを手作業でコーディングする必要があることです。

これを実現する 1 つの方法は、請求書モデル クラスで請求書アイテムを処理する特定のメソッドを作成することです。パラメータをそのメソッドに渡し、そのメソッドで請求書アイテムの作成/検索を処理し、invoice_item クラスで暗号化を処理する正しいセッター メソッドにパラメータを割り当てて、コントローラから直接そのメソッドを呼び出すことができます。

于 2011-08-08T12:30:59.803 に答える