如何使用Rails以嵌套形式访问模型的虚拟属性

时间:2013-03-04 19:21:48

标签: ruby-on-rails-3 nested-forms virtual-attribute

我有一个基本的嵌套表单。我想访问嵌套表单模型的虚拟属性。

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 个答案:

答案 0 :(得分:1)

如果我明白你要做什么,那你就非常接近了。您只需向下钻取一个级别即可访问表单构建器正在使用的模型对象:

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