2013-03-04 2 views
1

У меня есть базовая вложенная форма. Я хочу получить доступ к виртуальному атрибуту для модели вложенной формы.Как получить доступ к виртуальным атрибутам модели во вложенной форме с помощью 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> 

За исключением v irtual attribute error, эта форма работает так, как ожидалось.

Код должен создавать редактируемые таблицы транзакций с балансом до этой точки. ([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.

Спасибо! Phil

ответ

1

Если я понимаю, что вы пытаетесь сделать, вы очень близки. Вам просто нужно просверлить один уровень для доступа к объекту модели, который использует строитель форм:

<td style="width:100px;"><%= nested_f.object.balance_to_date(:dated) %> </td> 
+0

Это было! Спасибо, Дэн. Я забыл все о .объекте. – nevieandphil

Смежные вопросы