1

Sinatraプロジェクト用にレーキタスクを作成し、準備ができているものは使用しないことにしました。

#Rakefile

 require 'rake/testtask'
 require 'rake/clean'
 Dir.glob("tasks/*.rake").each { |r| import r }

#/tasks/seed.rake
require 'rubygems'
require 'bundler'
Bundler.require
require 'mongoid'
require_relative '../models/user'

namespace :db do
  task :seed do
    puts 'Creating a user....'

    user1 = User.new email: "email1@gmail.com", password: "test123"
    user1.save!

    puts 'User has been created.'
  end
end

#user.rb

require 'bcrypt'
require 'digest/md5'
require 'openssl'

class User
  include Mongoid::Document
  include Mongoid::Timestamps
  #.........

#gemfile (partly)
source 'http://rubygems.org'
gem 'bcrypt-ruby', require: 'bcrypt'

そして、「ユーザーを作成しています...」というエラーが発生しました。

rake aborted!
undefined method `create!' for BCrypt::Password:Class
/home/alex/ruby_projects/service/models/user.rb:47:in `password='"

#47は次のようになります

  def password= pass
    self.hashed_password = BCrypt::Password.create! pass, cost: 10
  end

通常の開発では、すべてが正常に機能することに注意してください。だから私は私が思うファイルを要求するのを逃しました。

あなたの考え?

ps入れても

   require 'bcrypt'
    require 'digest/md5'
    require 'openssl

/tasks/seed.rakeエラーが残っています。

4

1 に答える 1

1

BCrypt::Passwordから存在しないメソッドを使用しているようです。ドキュメントによると、メソッドのみがあり、.createメソッドはありません.create!。に切り替えるとBCrypt::Password.create、動作するはずです。

def password= pass
  self.hashed_password = BCrypt::Password.create pass, cost: 10
end
于 2013-03-27T07:49:52.647 に答える