2012-02-10 3 views
1

text_field의 값을 덮어 쓰는 사용자 지정 FormBuilder가 있습니다.중첩 된 양식에 대한 서브 클래 싱 레일 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을 구문 분석하는 방법이므로 @timesheetworklogs0을 수행 할 수 있으므로

@timesheet.worklogs[0] 

그러나 더 좋은 방법이 있습니까? 개체 = @ template.instance_variable_get (@object_name) : 많은 감사

답변

1

솔루션은 Worklog 인스턴스

@object.send(method)

+0

는이 뜻 텍스트 필드의 값입니다 @object을 사용하는 것입니다? 내가 볼 수 있도록 최종 코드 줄을 보여주십시오. 나는 똑같은 정확한 오류 메시지를 가지고있다. 그러나 나는 당신의 대답을 여기에서 이해하지 못한다. 객체 = @ template.instance_variable_get ("@ 번호 {@ OBJECT_NAME}") 올바른인가요 : 우리는 모두이 줄을 필요가 없습니다처럼 – MattSlay

+0

값은 = @ object.send (방법) –

+0

그래서 것 같습니다? – MattSlay