1

我有一个覆盖 text_field 值的自定义 FormBuilder。

class TimesheetFormBuilder < ActionView::Helpers::FormBuilder
  def text_field(method, opts)
    #Get a reference to the model object
    object = @template.instance_variable_get("@#{@object_name}")

    value = object.send(method)
    (opts ||= {}).merge!(value: value + '(foo)')
    super(method, opts)
  end
end

我有一个嵌套表格。时间表有许多工作日志

<%= form_for @timesheet, :builder => TimesheetFormBuilder do |timesheet_form| %>
  <%= timesheet_form.fields_for :worklogs do |worklog_form| %>
    <%= worklog_form.text_field :monday %>
  <% end %>
<% end %>

我遇到的问题是我不知道如何调用对象上的方法。

当我得到对象

object = @template.instance_variable_get("@#{@object_name}")

然后我得到一个错误

`@timesheet[worklogs_attributes][0]' 不允许作为实例变量名称

有一种方法可以解析,object_name所以我得到了@timesheetworklogs所以0我可以做到

@timesheet.worklogs[0]

但是有更好的方法吗?非常感谢

4

1 回答 1

1

解决方案是使用@object哪个是 Worklog 实例

@object.send(method)是文本字段的值

于 2012-02-10T21:54:49.517 回答