У меня есть собственный FormBuilder, который перезаписывает значение текстового поля.Подклассификация Rails 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
У меня есть вложенная форма. Табель имеет много worklogs
<%= 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]
Но есть ли лучший способ? Большое спасибо
ли вы имеете в виду это: объект = @ template.instance_variable_get (@object_name)? Пожалуйста, покажите свои окончательные строки кода, чтобы я мог видеть. У меня такое же сообщение об ошибке, но я не понимаю вашего ответа здесь. – MattSlay
значение = @ object.send (метод) –
Так, похоже, нам не нужна эта линия вообще: объект = @ template.instance_variable_get ("@ # {@ object_name}") Правильно ли это? – MattSlay