7

특정 AJAX 요청에 따라 양식 요소를 생성하는 것을 시도하고 있습니다.부분에 ActionView :: Helpers :: FormBuilder 전달하기

보기 :

<%= link_to 'Next', check_unique_id_students_path, :remote => true %> 

    <div id="guardian_student_details"></div> 

컨트롤러 :

def check_unique_id 
    @student = Student.new 
    @this_form = ActionView::Helpers::FormBuilder.new(:student, @student, @template, {}, proc{}) 
    end 

JS : 부분

jQuery("#guardian_student_details").html("<%=escape_javascript(render :partial => "student_details", :locals => { :s => @this_form }) %>"); 

:

,536,913

내 설정이다 디버깅 목적을 위해 63,210
<% puts s.text_field :first_name %> 
<% puts s.field_helpers %> 

내가 내 부분의 맨 처음에 다음 줄을 배치 :

<% puts s.class.to_s %> 
<% puts s.object.to_s %> 

이 출력합니다 :이 작업을해야

ActionView::Helpers::FormBuilder 
Student 

. 그러나 다음과 같은 오류를주고있다 레일 :

ActionView::Template::Error (undefined method `text_field' for nil:NilClass): 
1: <% puts s.class.to_s %> 
2: <p> 
3: <%= s.text_field :first_name, :class => 'text_input is_empty' %> 
4: <%= s.label :first_name %><strong>*</strong> 
5: </p> 
6: 

응용 프로그램/뷰/학생/_student_details.html.erb은 : 3 : "S"는 것을 NIL 뭔가를 의미 _app_views_students__student_details_html_erb__2485891544130782916_2214680440' app/views/students/check_unique_id.js.erb:2:in _app_views_students_check_unique_id_js_erb__3504800328150418937_2214933160 '

에 난 그냥 2를 검증 줄을 전에. 아무도 아이디어가 있니? 나는 이것이 컨트롤러에서 초기화 된 "@template"변수와 관련이 있는지 알지 못한다. 나는 주변에서 놀았고 실질적으로 어떤 것도 받아 들였고 인쇄 된 것이라면 아무 것도받지 못했다. 도움이 될 것입니다. 감사합니다

최종 참고 :

내가이를 구현하려고 : AJAX update of accepts_nested_attributes_for partials

답변

0

이 콘솔이 시도 :

s = ActionView::Helpers::FormBuilder.new(:student, @student, @template, {}, proc{}) 
s.text_field :first_name 

당신은 같은 오류가있을 것이다. 나는 정확한 실수를 모른다 할지라도 문제가 form_builder 객체의 생성에서 비롯된 것이라고 생각합니다. ...

당신의 솔루션은 다소 복잡합니다. 이 솔루션을 사용해보십시오.

#html.erb 
<% form_for @student do |f| %> 
    <div id='guardian_student_details' class='hide-this-block'> 
    <%= render :partial => "student_details", :locals => { :s => f }) %> 
    </div> 
<% end %> 

#js 
jQuery("#guardian_student_details").show(); 

일반적으로 자바 스크립트와 루비를 분리하는 것이 좋습니다.

+0

감사합니다. Alexandre, 저는이 방법이 유용하다는 것을 알고 있지만, FormBuilder를 사용하여 제안 된 방식으로 수행 할 수 있다면 제 기능이 크게 도움이 될 것입니다. – jalagrange

+0

Rails 2.3 또는 3 이상입니까? @template 변수가 Rails 3에 있는지 확실하지 않습니다. 언급 한 AJAX 업데이트 게시물을 통해이 메소드를 게시 한 이후로 코드를 변경했습니다. 결국 기존 인덱스를 잡고 증가시키지 않고 http://media.pragprog.com/titles/fr_arr/multiple_models_one_form.pdf의 수정 된 버전을 사용했습니다 (특히 중첩을 확장하려는 경우 특히 손상되기 쉽습니다. 다른 수준). – Pasted

+1

안녕 붙여 넣기, 이것은 레일 3.1입니다. 귀하의 의견과 링크에 감사드립니다. @template 대신 view_context를 사용하여 솔루션을 구현해 보았습니다. 다음과 같은 방식으로 중단됩니다. NameError : 정의되지 않은 로컬 변수 또는 main 메소드의'view_context '메소드 : Object – jalagrange

4

보기에서 'view_context'가 Rails 3.1에서 작동하지 않는다는 것을 발견했습니다. 대신 FormBuilder 객체를 만들 때 'self'를 시도하십시오.

의 = ActionView :: 도우미 :: FormBuilder.new (: 학생, @student, 자기, {}는 PROC는 {}) 컨트롤러에서 양식 빌더를 구축 할 필요가있는 사람들을위한

4

는 view_context는 여전히 작동 그곳에. Rails 4.1 사용하기.4 :

@object = Object.new 
@f = ActionView::Helpers::FormBuilder.new(:object, @object, view_context, {})