Создание подклассов Rails FormBuilder для вложенной формы - PullRequest
1 голос
/ 11 февраля 2012

У меня есть пользовательский FormBuilder, который перезаписывает значение поля text_.

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 чтобы я получил @timesheet и worklogs и 0 чтобы я мог сделать

@timesheet.worklogs[0]

Но есть ли лучший способ?Большое спасибо

1 Ответ

1 голос
/ 11 февраля 2012

Решение состоит в том, чтобы использовать @object, который является экземпляром Worklog

@object.send(method), значение текстового поля

...