2011-08-10 77 views
2

我想創建一個表單,作爲控制器上的銷燬方法的確認。在我的路線,我有:如何在Rails中使用RESTful路由創建刪除表單。

resources :leagues do 
    get 'delete', :on => :member 
end 

在我delete.html.erb,我有以下爲:

<% form_for current_league, :html => {:method => :delete} do |form| %> 
    <%= form.submit 'Yes' %> 
    <%= form.submit 'No', :name => 'cancel' %> 
<% end %> 

current_league是定義一個輔助函數:

def current_league 
    @current_league ||= League.find_by_id(params[:id]) 
end 

所以問題在於生成的表單僅編輯聯盟模型,如form method =「post」所示。

<form accept-charset="UTF-8" action="/leagues/1" class="edit_league" id="edit_league_1" method="post"> 
    <div style="margin:0;padding:0;display:inline"><input name="utf8" type="hidden" value="&#x2713;" /> 
    <input name="_method" type="hidden" value="delete" /> 
    <input name="authenticity_token" type="hidden" value="abcdefg" /> 
    </div> 
    <input id="league_submit" name="commit" type="submit" value="Yes" /> 
    <input id="league_submit" name="cancel" type="submit" value="No" /> 
</form> 

我該如何解決這個問題?

回答

6

我認爲這已經可行了。如導軌http://guides.rubyonrails.org/form_helpers.html#how-do-forms-with-patch-put-or-delete-methods-work-questionmark

但是,在提交表單時,大多數瀏覽器都不支持「GET」和「POST」以外的方法。

如您在輸出格式見有

的Rails通過模擬在POST等方法與名爲「_method」的隱藏輸入,它被設置爲反映所需的方法works`around這個問題

<form accept-charset="UTF-8" action="/leagues/1" class="edit_league" id="edit_league_1" method="post"> 
    .... 
    <input name="_method" type="hidden" value="delete" /> 
    .... 
</form> 

當讀這個變量時,rails會理解這是一個DELETE方法,而不是POST方法。即使它自己的形式是POST。

+0

我不敢相信我沒注意到我得到的錯誤> _>對不起,浪費你的時間,並感謝你指出了這一點。我得到一個模板丟失的錯誤,並認爲它正在調用更新操作。 – Max

相關問題