我有一個表與項目列表;表中的一列提供了將項目覈對爲「已完成」的機會。我正在使用f.check_box和f.submit。表單認爲它正在保存,但它根本不影響數據庫中的項目。窗體來更改一個變量
我的看法代碼:
<td><div><%= form_for [t] do |f| %>
<%= f.check_box :completed, {}, "true" %>
<%= f.submit 'Save' %>
<% end %></div></td>
我的控制器代碼是:
def update
@todo = Todo.find params[:id]
if @todo.save
redirect_to :back
flash[:notice] = "Success!"
else
redirect_to :back
flash[:notice] = "Please try again."
end
end
當我點擊複選框,然後單擊該行的「保存」按鈕,我重定向回列表獲得「成功!」消息,但數據庫中沒有任何事情發生。
我唯一能想到的是,當我在列表中查看源代碼時,有兩種不同的方法被複選框「post」和「patch」調用。我曾在我的routes.rb中創建補丁的路線,因爲否則的複選框不會解決所有:
<form accept-charset="UTF-8" action="/todos/53" class="edit_todo" id="edit_todo_53" method="post"><div style="margin:0;padding:0;display:inline"><input name="utf8" type="hidden" value="✓" /><input name="_method" type="hidden" value="patch" /><input name="authenticity_token" type="hidden" value="gUQ5ByGVYFncKW+6Rd/hYqiRE+DV5B1IS88EG1hZbBo=" /></div>
非常感謝您提供詳細,合理的解釋! – 2014-11-03 15:40:26