属性方法导致错误

时间:2012-07-22 08:10:57

标签: ruby-on-rails ruby-on-rails-3

我正在使用rails第4版(rails 3.2+)进行敏捷Web开发。长话短说,我最终弄乱了一些东西,所以我将书籍网站上的正确代码复制到了正确的文件中。具体来说,我正在进行一些功能测试,这是我替换的代码。我跑的时候:

rake test:functionals

我得到了:

0 failures, 6 errors

每个错误都是这样的:

ActiveModel::MassAssignmentSecurity::Error: Can't mass-assign protected attributes:

之前处理过这个错误,我能够推断出6个错误来自我复制和粘贴的代码中的6个属性方法。以下是各种功能测试的一些示例:

test "should update cart" do
    put :update, id: @cart, cart: **@cart.attributes**
    assert_redirected_to cart_path(assigns(:cart))
  end

test "should update order" do
    put :update, id: @order, order: **@order.attributes**
    assert_redirected_to order_path(assigns(:order))
  end

test "should update line_item" do
    put :update, id: @line_item, line_item: **@line_item.attributes**
    assert_redirected_to line_item_path(assigns(:line_item))
  end

现在,我也知道错误是由于属性b / c如果我用哈希替换它们就会消失:

model: {attribute: value, attribute: value, attribute: value, etc. }

而不是:

model: @model.attributes

所有分配的属性都在我模型中的attr_accessible方法中。因此,我真的无法弄清楚为什么属性方法不起作用。任何和所有的帮助将不胜感激。

1 个答案:

答案 0 :(得分:1)

你确定当用哈希替换@model.attributes时,你输入相同的属性吗?看起来attributes方法返回的某些模型属性并未由attr_accessible列入白名单,但是当您使用哈希替换它时,您只使用列入白名单的属性。