我有偏的形式,是在頁面上呈現:的Rails Ajax的CRUD:更新是PUTing爲「/模型」,而不是「/模型/:id爲」
<%= form_for @shift, :remote => true, :html => { :id => 'entry_form' } do |f| %>
... entry fields ...
<%= f.submit %>
其他部分在網頁上呈現是當天輪班的清單。創建和刪除工作很好,而且非常標準。舉例來說,我用創建簡單的Ajax方法:
page.replace_html('listing', render(:partial => 'listing', :object => @schedule))
(注@Schedule的has_many @shifts)
問題與編輯和更新出現。擊中「編輯」將有效地填充我的形式局部使用Ajax,但是當我打「更新轉變,」我遇到了以下錯誤:
Started POST "/shifts" for 127.0.0.1 at 2011-08-21 20:03:10 -0700
ActionController::RoutingError (No route matches "/shifts"):
顯然,這POST(或相當PUT)應承諾'移/:ID'。
這是我發現:如果我做我的「編輯」鏈接非遠程,創建正確的HTML和更新工作:
<form accept-charset="UTF-8" action="/tours/290" class="edit_tour" data-remote="true" id="entry_form" method="post">
但是,當我做「編輯」遠程,形式看起來它使一個新的對象,即使字段是正確填充和按鈕顯示爲「更新轉變」:
<form accept-charset="UTF-8" action="/shifts" class="new_shift" data-remote="true" id="entry_form" method="post">
這裏是我的edit.js.rjs:
page.replace_html('entry_form', render(:partial => 'shift_entry', :object => @schedule))
我的控制器內:
def edit
@shift = Shift.find(params[:id])
end
@schedule
在我的應用程序控制器設置。看起來我的update.js.rjs甚至沒有被調用。我正在使用原型。
任何想法?我真的很難過這個。謝謝!
編輯:
多一點信息。這裏是我的形式頭是什麼樣子時,它與@shift渲染= Shift.new(創建):
<form accept-charset="UTF-8" action="/shifts" class="new_shift" data-remote="true" id="entry_form" method="post"><div style="margin:0;padding:0;display:inline"><input name="utf8" type="hidden" value="✓" /><input name="authenticity_token" type="hidden" value="KwY8w4l6qgKs6T3aMW8EUvl7V9I38HO8mz+QadBXKig=" /></div>
原始(碎)編輯標題是以上。當我強迫:方法=>:把和嘗試的「編輯」 - (除了我創建行動休息),它看起來像這樣>「更新」,沒有什麼變化:
<form accept-charset="UTF-8" action="/shifts" class="new_shift" data-remote="true" id="entry_form" method="post"><div style="margin:0;padding:0;display:inline"><input name="utf8" type="hidden" value="✓" /><input name="_method" type="hidden" value="put" /><input name="authenticity_token" type="hidden" value="KwY8w4l6qgKs6T3aMW8EUvl7V9I38HO8mz+QadBXKig=" /></div>
不幸的是,我得到了同樣的錯誤,似乎使一個更新沒什麼區別。我試圖使用這個表單進行更新和創建,所以這個設置打破了我的創建動作。 – Acco
你介意發佈爲表單生成的HTML嗎?我只是好奇什麼是生成的,因爲你需要在表單中有一個隱藏的字段來做put,因爲PUT不是一個真正的HTTP動詞。我一直需要做:方法=>:爲了讓更新工作。 – Max
完全不是,我只是將一些輸出添加到原始文章中。如果您需要更多信息,請告知我 – Acco