2014-03-13 41 views
2

我正在使用Rails 4
我有一個stream模型,在routes.rb以下路由代碼:Rails生成更新表單而不是放置

namespace :admin do 
    resources :streams, param: :stream_id 
end 

我得到以下路線:

admin_streams GET /admin/streams(.:format)     admin/streams#index 
        POST /admin/streams(.:format)     admin/streams#create 
new_admin_stream GET /admin/streams/new(.:format)    admin/streams#new 
edit_admin_stream GET /admin/streams/:stream_id/edit(.:format) admin/streams#edit 
    admin_stream GET /admin/streams/:stream_id(.:format)  admin/streams#show 
        PATCH /admin/streams/:stream_id(.:format)  admin/streams#update 
        PUT /admin/streams/:stream_id(.:format)  admin/streams#update 
        DELETE /admin/streams/:stream_id(.:format)  admin/streams#destroy 

對於新流是沒有問題的,導軌產生正確的表格屬性爲create方法。
我的問題是當我嘗試生成update的窗體。正如this answer提到的,形式的我的代碼是:

<%= form_for @stream do |f| %> 
    : 
    : 
    <% f.button %> 
<% end %> 

然而,這就是軌道產生:

<form accept-charset="UTF-8" action="/streams/xxxx" class="edit_stream" id="edit_stream_4" method="post"> 

正如你所看到的,從某些原因,該方法Rails的選擇是post代替put

我知道我可以手動覆蓋該方法,但我很難相信這是我需要做的。有什麼建議麼?

回答

0

By default中的form_for助手使用POST。但是form_for方法可以檢測傳遞給它的對象是否已被保存。如果它一直存在,那麼它會識別您正在進行編輯並在表單上指定一個PATCH方法。否則它會自動使用POST!我希望這有幫助!

1

HTML form tag只需要get or post作爲method屬性的值。

請參閱Documentation for form tag

爲了支持大於GET and POST(already supported by form)PATCH, PUT and DELETE requests其它RESTful路線,導軌通過創建在其中以後追尋決定HTTP請求的類型的形式的hidden input field使用圍繞工作。

對於如:

<input name="_method" type="hidden" value="patch" /> 
相關問題