2012-02-10 2 views
1

У меня есть собственный 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] 

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

ответ

1

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

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

+0

ли вы имеете в виду это: объект = @ template.instance_variable_get (@object_name)? Пожалуйста, покажите свои окончательные строки кода, чтобы я мог видеть. У меня такое же сообщение об ошибке, но я не понимаю вашего ответа здесь. – MattSlay

+0

значение = @ object.send (метод) –

+0

Так, похоже, нам не нужна эта линия вообще: объект = @ template.instance_variable_get ("@ # {@ object_name}") Правильно ли это? – MattSlay

Смежные вопросы