我正在制作一个购物清单应用程序,我想让用户检查他们放在购物车中的物品。我想通过将属性“found”从false切换为true(在我的“item”模型中)来完成此操作。
以下是我的代码:
<% for item in @items %>
<tr>
<td><%= check_box, item, :found, {}, true, false %></td>
<td><%= item.quantity %></td>
<td><%= item.name %></td>
<td><%= item.category %></td>
</tr>
<br />
<% end %>
然后我在页面底部有一个“更新”链接。列表有很多项,当我要求更新列表时,我假设我也在更新该列表中项目的属性。
<%= link_to "Update", @list, :method => :put %> |
以下是我的列表控制器中的更新操作:
def update
@list = List.find(params[:id])
if @list.update_attributes(params[:list])
flash[:notice] = "Successfully updated list"
redirect_to @list
else
render :action => 'edit'
end
end
我相信我正在关注check_box的文档。然而,在我更新之后,“找到”布尔值会以某种方式保持为假。有谁知道如何正确实现这一点?我暂时不想使用AJAX。谢谢!
答案 0 :(得分:2)
我讨厌链接到我自己的博客,但在这种情况下,您可能希望check it out因为它直接相关(和IMO,比完整的请求周期解决方案更漂亮)。
答案 1 :(得分:1)
您的模型是否有可能在某些属性上具有attr_accessible或attr_protected on:found?
尝试将update_attributes更改为update_attributes!并查看是否有更多信息。
其他一些建议可能是将params转储到日志中,尝试直接赋值给模型(如item.found = params [:found] =='1'),确保复选框1或0被正确解释为布尔值true,false。