我有一个表与项目列表;表中的一列提供了将项目核对为“已完成”的机会。我正在使用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