【问题标题】:Using a check_box to change the boolean attribute on a model (rails)使用 check_box 更改模型上的布尔属性(rails)
【发布时间】:2011-09-15 03:10:20
【问题描述】:

我正在制作一个购物清单应用程序,我想让用户在其中检查他们已放入购物车的商品。我想通过将属性“找到”从假切换为真(在我的“项目”模型中)来做到这一点。

这是我的代码:

<% 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。谢谢!

【问题讨论】:

    标签: ruby-on-rails checkbox boolean


    【解决方案1】:

    我讨厌链接到我自己的博客,但在这种情况下,您可能想要check it out,因为它直接相关(和 IMO,比完整的请求周期解决方案更漂亮)。

    【讨论】:

    • 感谢您的建议!我正在关注您的迷你教程,但遇到了问题。我的 routes.rb 似乎无法识别 toggle_found_items_path(item) (相当于您的 toggle_approve_articles_path(article)),尽管到目前为止我已经按照您的说明进行操作。它可能与我在 routes.rb 中的 items 资源下放置的内容有关吗? :on => :member 做什么?谢谢!
    • :on =&gt; :member 表示它是 singular resource,但它是 custom RESTful action。这可能很简单(希望;)
    【解决方案2】:

    您的模型是否有可能在某些属性上具有 attr_accessible 或在 :found 上具有 attr_protected?

    尝试将 update_attributes 更改为 update_attributes!看看你是否得到更多信息。

    其他一些建议可能是将参数转储到日志中,尝试直接分配给模型(如 item.found = params[:found] == '1'),确保选中 1 或 0被正确解释为布尔值 true、false。

    【讨论】:

    • 谢谢!我想我知道发生了什么。 “@items 中的项目”代码仅用于显示;它不是一种形式。当我在实际的编辑表单页面中实现复选框时,一切正常。根据您的建议,检查开发日志帮助我实现了这一点。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多