7

Tôi đang khinh miệt để tạo các phần tử biểu mẫu theo một yêu cầu AJAX nhất định.Truyền ActionView :: Người trợ giúp :: FormBuilder đến một phần

Đây là thiết lập của tôi:

Xem:

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

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

Bộ điều khiển:

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 }) %>"); 

từng phần:

<% puts s.text_field :first_name %> 
<% puts s.field_helpers %> 

Đối với mục đích gỡ lỗi tôi đặt những dòng sau vào đầu rất của một phần của tôi:

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

này in ra:

ActionView::Helpers::FormBuilder 
Student 

này nên làm việc. Tuy nhiên Rails là đưa ra các lỗi sau:

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: 

app/views/sinh viên/_student_details.html.erb: 3: trong _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'

nào ngụ ý rằng "s" là NIL một cái gì đó tôi xác nhận chỉ 2 dòng trước. Không ai có bất kỳ ý tưởng? tôi không biết nếu điều này có cái gì để làm với biến "@template" khởi tạo trong bộ điều khiển. Mà tôi chơi xung quanh với và chấp nhận thực tế bất cứ điều gì và nếu in là nil. Mọi trợ giúp sẽ được đánh giá cao. Cảm ơn

Cuối cùng lưu ý:

Tôi cố gắng để thực hiện điều này: AJAX update of accepts_nested_attributes_for partials

Trả lời

0

Hãy thử điều này trong một giao diện điều khiển:

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

Bạn sẽ có lỗi tương tự. Tôi nghĩ rằng vấn đề xuất phát từ việc bạn tạo ra đối tượng form_builder, ngay cả khi tôi không biết sai chính xác ...

Giải pháp của bạn dường như hơi phức tạp một chút. Bạn có thể thử giải pháp này:

#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(); 

Nói chung, tôi thích tách javascript và ruby.

+0

Cảm ơn Alexandre, tôi biết điều này có hiệu quả, nhưng chức năng của tôi sẽ rất có lợi nếu tôi có thể làm theo cách được đề xuất với Trình tạo biểu mẫu. – jalagrange

+0

Đây có phải là trong Rails 2.3 hoặc 3+ không? Không chắc chắn nếu biến @template tồn tại trong Rails 3. Với bài viết cập nhật AJAX bạn đã đề cập đến tôi đã thay đổi mã kể từ khi tôi đăng phương thức đó. Cuối cùng, tôi đã sử dụng phiên bản sửa đổi của http://media.pragprog.com/titles/fr_arr/multiple_models_one_form.pdf thay vì lấy chỉ mục hiện có và tăng nó (nó dễ bị phá vỡ đặc biệt nếu tôi muốn mở rộng lồng vào Mức độ khác). – Pasted

+1

Xin chào dán, đây là đường ray 3.1. Cảm ơn bạn đã bình luận và liên kết của bạn. Tôi đã thử thực hiện giải pháp của bạn bằng cách sử dụng view_context thay vì @template và nó phá vỡ theo cách sau: NameError: undefined local variable hoặc method 'view_context 'cho main: Object – jalagrange

4

Trong chế độ xem, tôi thấy rằng 'view_context' không hoạt động trong Rails 3.1. Thay vào đó hãy thử 'self' khi tạo một đối tượng FormBuilder.

s = ActionView :: Helpers :: FormBuilder.new (: student, @student, tự, {}, proc {})

4

Đối với bất cứ ai cần phải xây dựng một nhà xây dựng hình thức trong bộ điều khiển, view_context vẫn hoạt động đó. Sử dụng Rails 4.1.4:

@object = Object.new 
@f = ActionView::Helpers::FormBuilder.new(:object, @object, view_context, {}) 
Các vấn đề liên quan