2013-03-04 64 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实际属性错误,此表单按预期工作。

该代码应该产生一个可编辑的交易表,其中的余额至此为止。 ([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> 
+0

就是这样!谢谢丹。我忘了所有关于.object。 – nevieandphil 2013-03-05 07:20:07