1

私はrails4thedition(rails 3.2+)を使用してアジャイルWeb開発に取り組んでいます。簡単に言えば、私は何かを台無しにしてしまったので、本の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メソッドにあります。したがって、属性メソッドが機能しない理由を本当に理解することはできません。ありとあらゆる助けをいただければ幸いです。

4

1 に答える 1

1

ハッシュに置き換えるとき@model.attributes、同じ属性を入れてよろしいですか? attributesメソッドによって返されるモデル属性の一部は、によってホワイトリストに登録されていないように見えattr_accessibleますが、ハッシュに置き換える場合は、ホワイトリストに登録されたもののみを使用します。

于 2012-07-22T08:37:55.390 に答える