2012-02-02 2 views
0

3 개의 관련 모델로 중첩 된 양식이 있습니다. 맞춤 양식 작성 도구 PanelFormBuilder으로 모든 입력란을 작성하고 싶습니다. 그러나 form_for은 양식 작성자가 처리하는 것으로 보이고 fields_for은 처리하지 않습니다. 기본 처리기로 처리됩니다. 나는 내 인생이 왜 힘든 일을 할 수는 없다.fields_for 메소드에서 사용자 정의 양식 빌더가 호출되지 않았습니다.

이 작동 :

<%= panel_form_for @firm do |f| %> 

이 그렇지 않은 : 여기

module ApplicationHelper 
    def panel_form_for(object, options = {}, &block) 
    options[:builder] = PanelFormBuilder 
    form_for(object, options, &block) 
    end 

    def panel_fields_for(object, options = {}, &block) 
    options[:builder] = PanelFormBuilder 
    fields_for(object, options, &block) 
    end 
end 

는 사용자 지정 양식 빌더

class PanelFormBuilder < ActionView::Helpers::FormBuilder 
    delegate :content_tag, :tag, to: :@template 

    %w[text_field text_area password_field].each do |method_name| 
    define_method(method_name) do |name, *args| 
     options = args.extract_options! 
     options.merge!(:class => "required") 
     super(name, *(args + [options])) 
    end 
    end 
end 
,691입니다 : 여기
<%= panel_fields_for @firm.company do |c| %> 

사용자 정의 메소드입니다

누구나 내가 뭘 잘못하고 있다고 말할 수 있습니까?

감사합니다.

답변

1

내 대답을 찾았습니다. 나는이 일을 했어야 밝혀 : 나는 전혀 panel_fields_for 필요하지 않습니다

<%= f.fields_for :company do |c| %> 

:

<%= panel_form_for @firm do |f| %> 

하였다. fields_for의 정의에서

1

봐 : 당신이 인수로 블록과 fields_for를 호출 할 때

fields_for(record_name, record_object = nil, options = {}, &block) 

는, 루비가 지정한 options 매개 변수가 실제로 옵션임을 알아낼 수 있지만, 대신하지 않습니다 그것이 record_object 매개 변수라고 생각하십시오.

당신은 단지 두 번째 매개 변수로 nil을 통과 할 수 있으며, 사용자 정의 빌더가 인스턴스화됩니다 : 당신의 빌더 객체에 대한 액세스 권한이없는 경우이 상황에서 알고 좋을 수있다

fields_for(object, nil, options, &block) 

양식을 만들 때와 같이 별도의 yield 블록에서 일부 필드를 만들 때와 같이

관련 문제