accepts_nested_attributes_for виртуальных атрибутов - PullRequest
2 голосов
/ 08 августа 2011

У меня есть 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 при создании счета ...

Любые указатели на то, как заставить это работать, были бы великолепны.

1 Ответ

2 голосов
/ 08 августа 2011

Дело в том, что поскольку поля являются виртуальными атрибутами, вам необходимо пройти через методы установки полей для вашей модели элементов счета-фактуры, поэтому вам придется вручную кодировать решение, а не полагаться на вложенные атрибуты.

Одним из способов достижения этого было бы создание специального метода для обработки элементов счета в классе модели счета.Вы можете передать параметры в этот метод и заняться созданием / поиском элемента счета в этом методе, назначив параметры правильным методам установки, которые обрабатывают шифрование в классе invoice_item, а затем вызовите этот метод непосредственно из вашего контроллера.

...