Как получить доступ к виртуальным атрибутам модели во вложенной форме с помощью Rails
У меня есть базовая вложенная форма. Я хочу получить доступ к виртуальному атрибуту для модели вложенной формы.
Model 1: Lease
Has_many :transactions
accepts_nested_attributes_for :transactions, :reject_if => lambda { |a| a[:dated].blank? }, :allow_destroy => true
...
Model 2: Transaction
belongs_to :lease
def balance_to_date(aDate)
#Returns the current balance up to aDate
...
end
...
Во вложенной форме я хочу поставить что-то вроде:
<td style="width:100px;"><%= nested_f.text_field :dated, size: 8 %> </td>
<td style="width:100px;"><%= nested_f.text_field :label, size: 8 %> </td>
<td style="width:100px;"><%= nested_f.text_field :credit, size: 6 %> </td>
<td style="width:100px;"><%= nested_f.text_field :debit, size: 6 %> </td>
<td style="width:100px;"><%= nested_f.balance_to_date(:dated) %> </td>
И я хочу, чтобы следующее дало мне баланс на сегодняшний день.
nested_f.balance_to_date (: датированный)
Или чтобы иметь возможность сделать что-то вроде
Запуск кода, как показано здесь, дает мне:
undefined method `balance_to_date' for#<ActionView::Helpers::FormBuilder:0xac78bac>
Кроме ошибки виртуального атрибута, эта форма работает как ожидалось.
Код должен создавать редактируемую таблицу транзакций с балансом до этого момента. ( [xx] - мой способ отображения полей ввода).
Dated Label Credit Debit Balance
[ 1/1/2012 ] [ Rent due ] [ ] [ 600 ] -600
[ 1/2/2012 ] [ Payment ] [ 600 ] [ ] 0
[ 2/1/2012 ] [ Rent due ] [ ] [ 600 ] -600
[ 2/2/2012 ] [ Payment ] [ 500 ] [ ] -100
[ 3/1/2012 ] [ Rent due ] [ ] [ 600 ] -700
[ 3/6/2012 ] [ late fee ] [ ] [ 50 ] -750
[ 3/7/2012 ] [ Payment ] [ 800 ] [ ] 50
[ 4/1/2012 ] [ Rent due ] [ ] [ 600 ] -550
Будем очень благодарны за любые советы о том, как получить доступ и отобразить этот виртуальный атрибут модели и дату из текущей отображаемой записи. Надеюсь, я не продублировал предыдущий вопрос.
Я использую Rails 3.2.12 и Ruby 1.9.3.
Спасибо! Фил
1 ответ
Если я понимаю, что вы пытаетесь сделать, вы очень близки. Вам просто нужно детализировать один уровень, чтобы получить доступ к объекту модели, который использует построитель форм:
<td style="width:100px;"><%= nested_f.object.balance_to_date(:dated) %> </td>