3

移行

class CreateUsers < ActiveRecord::Migration
  def change
    create_table :users do |t|
      t.string :name
      t.string :password_digest

      t.timestamps
    end
  end
end

モデル

class User < ActiveRecord::Base
  attr_accessible :name, :password_digest
  validates :name, :presence => true, :uniqueness => true
  has_secure_password
end

ユーザー登録フォーム

.main_form
  = form_for @user do |f|

    %div
      = f.label :name
      = f.text_field :name, :size=>40

    %div
      = f.label :password, "Password"
      = f.password_field :password

    %div
      = f.label :password_confirmation, "Confirmation"
      = f.password_field :password_field

    %div
      = f.submit 'Create user'

新しいユーザーを登録しようとすると、例外がスローされます

ActiveModel::MassAssignmentSecurity::Error in UsersController#create

Can't mass-assign protected attributes: password, password_field

私は何を間違えましたか?

4

1 に答える 1

5

これら 2 つのフィールドをhas_accessibleリストに追加する必要があります。Rails は、データベース フィールドを一括代入から保護するだけでなく、これらの「仮想」フィールドのようなすべてのフィールドも保護します。

ユーザーモデル(attr_accesibleラインの代わりに):

attr_accessible :name, :password_field, :password

また、password_digestユーザー入力ではなく計算フィールドであるため、いかなる場合でも変更できないようにする必要があります。

于 2012-08-10T10:11:11.390 に答える