2012-06-18 21 views
5

我有一個表單部分,我在兩個地方使用添加新配料(在配方應用程序中)。當我第一次構建應用程序時,我希望用戶能夠在填寫新配方卡時添加新配料。我使用了一個模式彈出窗口和AJAX,這樣新的成分窗體彈出,完成,當點擊提交按鈕時,一些jQuery隱藏模式框並更新頁面上的一些選項標籤。Rails - 爲AJAX和非AJAX請求使用相同的表單部分

從配方表格中,我使用<%= link_to 'New ingredient', new_ingredient_path, :remote => true %>調用配料部分。我的成分new.html.erb文件只包含了部分的電話:

<%= render 'form' %> 

而且_form.html.erb樣子:(剪斷,爲了簡潔等領域)

<%= 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 %> 

我的問題是我現在希望用戶也能夠從網站的配料部分創建新的配料。由於我不需要網站那部分的模式框和jQuery功能,我寧願將它視爲香草HTML請求。但是,我不知道如何根據需要「關閉」AJAX功能,或者如果這是一種很好的做法。

我想過在指向新成分表單的鏈接中傳遞一個參數,並使用它來控制表單中的:remote屬性。這裏最好的做法是什麼?理想情況下,可以通過鏈接控制表單的遠程屬性,從而使我可以將AJAX保留在一個位置,並在另一個位置使用HTML。我可以很容易複製的形式作爲非AJAX版本和調用,但是這不是很乾......

回答

4

如何簡單:

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

輝煌 - 清潔,簡單,並且(最重要的) - 有用!!!謝謝! – Jim