使用check_box更改模型上的布尔属性(rails)

时间:2011-09-15 03:10:20

标签: ruby-on-rails checkbox boolean

我正在制作一个购物清单应用程序,我想让用户检查他们放在购物车中的物品。我想通过将属性“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。谢谢!

2 个答案:

答案 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。