2013-03-22 32 views
10

Tôi đã xem và sao chép các bản phát thanh này trên ứng dụng của mình: 196-nested-model-form-part-1197-nested-model-form-part-2. Tôi chưa có tài khoản chuyên nghiệp nên tôi không thể xem tập được sửa đổi.Thêm các trường động vào biểu mẫu lồng nhau qua AJAX

Tôi đang phát triển dưới đường ray4 (cạnh) và link_to_function đã không còn được dùng để ủng hộ JS không phô trương (tuyệt vời).

Tôi sẽ giữ ví dụ về các chương trình phát sóng trên (ví dụ: khảo sát/câu hỏi). Những gì tôi muốn làm là sử dụng một phần câu hỏi thông qua javascript không phô trương và tôi chỉ không biết làm thế nào và ở đâu tôi nên làm điều này.

Tôi đã nghĩ đến hai cách để làm như vậy:

  • cách đầu tiên sẽ được thêm vào trong app/assets/javascripts tôi một tập tin surveys.js với chức năng nhưng tôi không thấy làm thế nào tôi có thể sử dụng một phần của tôi từ đây .
  • Cách khác là tạo một hành động mới trong số SurveyController của tôi sẽ trả lời bằng câu hỏi một phần nhưng tôi bị làm phiền bởi thực tế có một hành động cụ thể đối với các câu hỏi trong bộ điều khiển khảo sát của tôi.

Tôi không thể nghĩ rằng phải có cách tốt hơn để thực hiện việc này.

Trả lời

9

Tôi không có một tài khoản pro trên Railscasts một trong hai, nhưng đôi khi nó là một ý tưởng tốt để có một cái nhìn tại Ryan's Github account. Thông thường anh ta phát triển đá quý cho những thứ anh ta bao phủ trong các tập phim của mình. Ở đó bạn sẽ tìm thấy viên đá quý tuyệt vời nested_form này, chính xác những gì bạn muốn.

Tất nhiên bạn có thể tái tạo lại bánh xe, nhưng tôi nghĩ việc sử dụng đá quý của Ryan dễ dàng và nhanh hơn nhiều. Tài liệu giải thích hoàn hảo cách sử dụng nó. Chúc vui vẻ!

+0

Cảm ơn bạn @Charles.Tôi thực sự thấy rằng đá quý nested_form nhưng tôi đã không thử nó vì nó đòi hỏi việc sử dụng 'nested_form_for' và tôi đã sử dụng' simple_form'. Tôi không hoàn toàn chắc chắn tôi có thể sử dụng cả hai. – Crystark

+0

Có, bạn có thể. Chỉ cần sử dụng 'simple_nested_form_for'. Xem [this] (https://github.com/ryanb/nested_form#simpleform-and-formtastic-support). – weltschmerz

+0

Đó là những gì tôi đã làm. Tôi biết có tài khoản chuyên nghiệp vì vậy tôi đã có thể xem các tập phim sửa đổi. – Crystark

17

Bạn có biết về các liên kết và biểu mẫu từ xa không? Bạn có thể sử dụng một liên kết từ xa ở đây để thực hiện những gì bạn muốn.

Theo quan điểm của bạn:

link_to 'Add question', add_question_path(@survey), remote: true 

Trong điều khiển của bạn

def add_question 
    @survey = Survey.find(params[:id]) 

    respond_to do |format| 
    format.js #add_question.js.erb 
    end 
end 

Bước cuối cùng là tạo ra một ứng dụng tập tin/views/khảo sát/add_question.js.erb

$('#my_survey').append('<%=j render partial: 'my_question_partial' %>') 

Đừng quên tạo tuyến đường cho ask_question_path

của bạn

Đối với thông tin thêm về các liên kết từ xa và các hình thức xem: http://tech.thereq.com/post/17243732577/rails-3-using-link-to-remote-true-with-jquery-ujs

+0

Cảm ơn bạn @Arjan. Đó thực sự là những gì tôi có nghĩa là bằng cách tạo ra một hành động mới trong SurveyController của tôi nhưng tôi đã không hoàn toàn chắc chắn về việc này vì những lý do tôi đã giải thích ở trên. Giải pháp của bạn, mặc dù, có vẻ sạch sẽ và khô ráo. Failling để tìm một giải pháp khác, tôi có lẽ sẽ đi cho điều này. – Crystark

+2

tại sao có một j bên trong '<% = j render một phần' – Clam

+2

@Clam' j' là một bí danh cho trình trợ giúp javascript 'escape_javascript'. http://api.rubyonrails.org/classes/ActionView/Helpers/JavaScriptHelper.html#method-i-escape_javascript – clozach

Các vấn đề liên quan