Pertanyaan (Rails): NoMethodError: biaya metode tidak terdefinisi 'untuk BCrypt :: Engine: Kelas


Ketika saya belajar "Ruby on Rails Tutorial", dan saya ingin membuat Pengguna di konsol:

irb(main):001:0> User.create(name:"gsky",email:"k@q.com",
irb(main):002:1* password:"aaaaaa",password_confirmation:"aaaaaa")

kemudian, saya mendapatkan pesan kesalahan berikut:

NoMethodError: undefined method cost' for BCrypt::Engine:Class
from D:/RailsInstaller/Ruby2.0.0/lib/ruby/gems/2.0.0/gems/activemodel-4.
0.2/lib/active_model/secure_password.rb:104:inpassword='
from D:/RailsInstaller/Ruby2.0.0/lib/ruby/gems/2.0.0/gems/activerecord-4
.0.2/lib/active_record/attribute_assignment.rb:42:in public_send'

Ini adalah model pengguna:

class User < ActiveRecord::Base

  before_save { self.email = email.downcase }

  validates :name,  presence: true, length: { maximum: 50 }

  VALID_EMAIL_REGEX = /\A[\w+\-.]+@[a-z\d\-.]+\.[a-z]+\z/i

  validates :email, presence: true,
                    format: { with: VALID_EMAIL_REGEX },
                    uniqueness: { case_sensitive: false }

   has_secure_password

   validates :password, length: { minimum: 6 }

end

12
2018-02-18 12:17


asal


Jawaban:


Tambahkan bcrypt-ruby ke Gemfile Anda seperti yang ditentukan di bawah ini:

     gem 'bcrypt-ruby', '3.1.2'

lalu lari pembaruan bundel dari direktori root proyek Anda dan bundel pemasangan


15
2018-02-18 13:23



Ketika saya melihat "Ruby On Rails Tutorial" Saya telah menemukan masalah yang sama, Saya memecahkannya dengan mengatur Gemfile dari:

gem 'bcrypt-ruby', '3.0.1' 

untuk:

gem 'bcrypt-ruby', '3.1.2' 

lalu lari:

bundle install

8
2017-09-21 17:38



Juga untuk tutorial / buku dan memiliki masalah yang sama, saya menggunakan gem 'bcrypt-ruby', '~> 3.0.0' karena masalah dengan bundle install. Setelah melalui secure_password.rb, masalahnya ada di BCrypt :: Engine.cost, metode ini sebenarnya tidak ada.

Saya mengubah permata saya menjadi gem 'bcrypt-ruby', '~> 3.1.0' yang menginstal bcrypt 3.1.7. Melihat pesan peringatan tentang permata yang diubah namanya dan mengubahnya menjadi gem 'bcrypt', '~> 3.1.0' (bagian ini seharusnya tidak masalah). Setelah melakukan bundle install, saya dapat melihat implementasi Bcrypt :: Engine.cost melalui IDE saya dan saya dapat membuat pengguna saya di rel c.

Saya ingin menambahkan bahwa menambahkan ActiveModel :: SecurePassword.min_cost = true di test.rb dapat membiarkan saya membuat pengguna baru jika saya menjalankan rel c dalam lingkungan pengujian, tetapi ketika saya menambahkan baris yang sama dalam development.rb, itu tidak t bekerja.


5
2018-04-20 22:04



Saya pikir Anda belajar rel dari tutorial. Jika Anda hanya ingin melanjutkan dan tidak menghabiskan banyak waktu untuk melakukan perbaikan yang benar, Anda dapat menggunakan biaya seperti katakanlah 10, daripada memanggil BCrypt::Engine.costmetode.

Jadi ganti

cost = BCrypt::Engine.cost

dengan

cost = 10

Nilai ini ketika digunakan akan memakan waktu kurang dari 200 md untuk menghitung dan itu harus baik-baik saja.


0
2017-10-31 22:48



Diuji pada mac:

Sertakan ini di gemfile Anda:

gem 'bcrypt', '3.1.11'

menjalankan:

xcode-pilih - instal

kemudian jalankan: bundle install

Itu dia.

Hebat sekali


0
2017-12-13 10:45