私はこのビデオチュートリアルに従い、認証を最初から作成する方法を学びます。
http://www.youtube.com/watch?v=O5RDisWr_7Q
これがユーザーの移行ファイルです。
class CreateUsers < ActiveRecord::Migration
def change
create_table :users do |t|
t.string :email
t.string :password_hash
t.string :password_salt
t.timestamps
end
end
end
そして私のコントローラー:
class UsersController < ApplicationController
def new
@user = User.new
end
def create
@user = User.new(params[:users])
if @user.save
redirect_to root_url, :notice => "Signed up!"
else
render "new"
end
end
end
そして最後に私のモデル:
class User < ActiveRecord::Base
attr_accessible :email, :password_hash, :password_salt
before_save :encrypt_password
validates_confirmation_of :password
validates :password, presence: true
validates :email, presence: true
def encrypt_password
if password.present?
self.password_salt = BCrypt::Engine.generate_salt
self.password_hash = BCrypt::Engine.hash_secret(password, password_salt)
end
end
end
今、私はこのエラーが発生している理由を知っていると思います。明らかに、@user.save
呼び出しはUserテーブルのpasswordフィールドに値を保存しようとしてpassword
いますが、そのフィールドはデータベースに存在しません。ビデオの中で彼は、このバグを修正するには、モデルに次のように追加する必要があると述べています。attr_accessible :password
モデルに追加すると機能するはずですが、次のエラーが発生します。
UsersController#createのNoMethodError
#の未定義のメソッド `password'
app / controllers / users_controller.rb:8:in `create '
助言がありますか?緩いhtmlフィールドの代わりに、強く型付けされたモデルを使用することに伴う検証を利用したいと思います。