2012-06-18 28 views
5

Tôi có một phần mẫu mà tôi đang sử dụng ở hai nơi để thêm các thành phần mới (trong một ứng dụng công thức). Khi tôi lần đầu tiên xây dựng ứng dụng, tôi muốn người dùng có thể thêm một thành phần mới trong khi họ đang điền vào một thẻ công thức mới. Tôi đã sử dụng một cửa sổ bật lên phương thức và AJAX để biểu mẫu thành phần mới bật lên, được hoàn thành và khi nút gửi được nhấp vào một số jQuery ẩn hộp phương thức và cập nhật một số thẻ tùy chọn trên trang.Đường ray - sử dụng cùng một phần biểu mẫu cho các yêu cầu AJAX và không phải AJAX

Từ biểu mẫu công thức, tôi gọi thành phần một phần bằng cách sử dụng <%= link_to 'New ingredient', new_ingredient_path, :remote => true %>. thành phần tập tin new.html.erb của tôi chỉ có một cuộc gọi đến một phần:

<%= render 'form' %> 

Và _form.html.erb trông giống như: (lĩnh vực khác snipped cho ngắn gọn)

<%= form_for @ingredient, :remote => true do |f| %> 
    <%= render 'shared/ingredient_error_messages' %> 
    <div class="field"> 
     <%= f.label :name %> 
     <%= f.text_field :name %> 
    </div> 
    <div class="field"> 
     <%= f.label :amount %> 
     <%= f.text_field :amount%> 
    </div> 
    <div class="actions"> 
     <%= f.submit "Save ingredient" %> 
    </div> 
<% end %> 

Vấn đề của tôi là rằng bây giờ tôi muốn người dùng cũng có thể tạo ra một thành phần mới từ phần thành phần của trang web. Vì tôi không cần hộp phương thức và chức năng jQuery trên phần đó của trang web, tôi muốn điều này được coi là một yêu cầu HTML vani. Tuy nhiên, tôi không biết làm thế nào để "tắt" các chức năng AJAX theo yêu cầu, hoặc nếu điều này thậm chí là thực hành tốt.

Tôi đã nghĩ đến việc truyền tham số trong các liên kết đến biểu mẫu thành phần mới và sử dụng điều đó để kiểm soát thuộc tính: từ xa trong biểu mẫu. Thực hành tốt nhất ở đây là gì? Lý tưởng nhất là một cách để kiểm soát thuộc tính từ xa của biểu mẫu từ liên kết, cho phép tôi giữ AJAX của mình ở một vị trí và sử dụng HTML ở vị trí khác. Tôi có thể dễ dàng lặp lại trong các hình thức như một phiên bản không AJAX và gọi đó, nhưng đó không phải là rất khô ...

Trả lời

4

Làm thế nào về đơn giản:

<%= form_for @ingredient, :remote => request.xhr? do |f| %> 
+0

Brilliant - sạch, đơn giản, và (tốt nhất của tất cả) - nó hoạt động !!! Cảm ơn bạn! – Jim

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