1

アプリにSQLiteの代わりにMongoidを使用しようとしています。

したがって、私のコードは次のようになります。

class User 

  include Mongoid::Document
  include Mongoid::Timestamps


  field :name,  type: String
  field :email, type: String
  field :encrypted_password, type:  String
  field :salt , type: String
  field :admin , type: Boolean


  attr_accessor   :password
  attr_accessible :name, :email, :password, :password_confirmation
 .....

   def has_password?(submitted_password)
      encrypted_password == encrypt(submitted_password)
    end

  ....

 class << self
def authenticate(email_id, submitted_password)
  print "authenticate the user " + email_id
  user = User.where(email:email_id)

  if user.nil?
    return false
  else
    print "\n Check the passsword" + user.has_password?(submitted_password)

  end

end

それで、

以前、ActiveRecordを使用していたとき、次の機能でユーザーを認証できました。

 def authenticate(email, submitted_password)
-      user = find_by_email(email)
-      (user && user.has_password?(submitted_password)) ? user : nil

しかし今、認証機能は次のように言って失敗します:

undefined method `has_password?' for #<Array:0xbcc55b4>

Mongoidを使用するための細かい部分が欠けていますか?

4

1 に答える 1

1

Mongoidのこの行user = User.where(email:email_id)は配列である基準を返すため、1人のユーザーを選択するには、user = User.where(email:email_id).first1つのドキュメントのみを返し、メソッドを実行できるものに置き換える必要があります。has_password?

于 2013-02-04T07:43:30.830 に答える