2

モデルで属性応答をテストしています。

it { should respond_to(:password) }
it { should respond_to(:password_confirmation) }

これらの属性はデータベースの一部ではありませんが、私のモデルでは単にとして宣言されていattr_accessibleます。それらを宣言せずにテストを実行すると、次のようになります。

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

しかし、私がそれらを宣言した後、私は得ます:

ActiveRecord::UnknownAttributeError:
  unknown attribute: password

なぜこれが起こるのか考えていますか?

4

2 に答える 2

3

@ 8viusは、チュートリアルに従っているためですが、十分に厳密ではありません。次の行を追加する必要があります。

has_secure_password

以下attr_accessible:email、:name、:role、:password、:password_confirmation

これにより、プレーンテキストのpasswordとpassword_confirmationをメモリに保存できるため、暗号化してDBに保存する前に、文字列を比較して同等性を適用できます。パスワードをプレーンテキストでデータベースに保持したくない。

于 2012-11-13T00:47:19.140 に答える
2

attr_accessibleRailsに、いわゆる属性の一括代入を許可するように指示します。

ただし、属性は db に存在する必要があります。または、getter/setter を作成する必要があります。最も簡単な方法は次のとおりです。

attr_accessor :password_confirmation, :password

とにかく、パスワードを保存しないのは奇妙に聞こえます。

于 2012-08-19T08:51:54.577 に答える