1

我正在尝试使用更改为支持 bcrypt 密码的模型,就像这样

require 'bcrypt'
class User < ActiveRecord::Base
  # users.password_hash in the database is a :string
  include BCrypt

  def password
    @password ||= Password.new(password_hash)
  end

  def password=(new_password)
    @password = Password.create(new_password)
    self.password_hash = @password
  end
end

我在脚手架之后添加了这个,希望密码和密码 = 足以让它继续运行,使用这个,但是它不起作用,form_for() 等不起作用,我收到错误:

ActionView::Template::Error (invalid hash):
2012-06-07T12:45:20+00:00 app[web.1]:     17:   </div>
2012-06-07T12:45:20+00:00 app[web.1]:     18:   <div class="field">
2012-06-07T12:45:20+00:00 app[web.1]:     19:     <%= f.label :password %><br />
2012-06-07T12:45:20+00:00 app[web.1]:     20:     <%= f.text_field :password %>
2012-06-07T12:45:20+00:00 app[web.1]:     21:   </div>
2012-06-07T12:45:20+00:00 app[web.1]:     22:   <div class="field">
2012-06-07T12:45:20+00:00 app[web.1]:     23:     <%= f.label :email %><br />

有谁知道我怎样才能完成这项工作,我是 Rails 的新手

这是按要求在新功能完整回溯中:

2012-06-12T18:23:57+00:00 app[web.1]: ActionView::Template::Error (invalid hash):
2012-06-12T18:23:57+00:00 app[web.1]:     19:     <%= f.label :password %><br />
2012-06-12T18:23:57+00:00 app[web.1]:     18:   <div class="field">
2012-06-12T18:23:57+00:00 app[web.1]:     17:   </div>
2012-06-12T18:23:57+00:00 app[web.1]:     20:     <%= f.text_field :password %>
2012-06-12T18:23:57+00:00 app[web.1]:     22:   <div class="field">
2012-06-12T18:23:57+00:00 app[web.1]:     23:     <%= f.label :email %><br />
2012-06-12T18:23:57+00:00 app[web.1]:   app/models/user.rb:19:in `new'
2012-06-12T18:23:57+00:00 app[web.1]:     21:   </div>
2012-06-12T18:23:57+00:00 app[web.1]:   app/models/user.rb:19:in `password'
2012-06-12T18:23:57+00:00 app[web.1]:   app/views/users/_form.html.erb:20:in `block in _app_views_users__form_html_erb__2064609863987267967_31546180'
2012-06-12T18:23:57+00:00 app[web.1]:   app/views/users/_form.html.erb:1:in `_app_views_users__form_html_erb__2064609863987267967_31546180'
2012-06-12T18:23:57+00:00 app[web.1]:   app/views/users/new.html.erb:3:in `_app_views_users_new_html_erb___1991359801167056023_31763940'
2012-06-12T18:23:57+00:00 app[web.1]:   app/controllers/users_controller.rb:251:in `new'
4

1 回答 1

1

异常消息“invalid hash”表明您的视图工作正常,但User#password无论出于何种原因都失败了。也许用户没有定义密码哈希(即,它是 nil、“”或其他一些无效值),导致Password.new出错?

查看您的回溯似乎强化了这一点:

2012-06-12T18:23:57+00:00 app[web.1]:   app/models/user.rb:19:in `new'
2012-06-12T18:23:57+00:00 app[web.1]:   app/models/user.rb:19:in `password'.

new在您的password方法内部调用时,错误发生在 user.rb 中。因此我猜第 19 行是

@password ||= Password.new(password_hash)

所以它看起来像Password.new不喜欢的价值password_hash出于某种原因。究竟为什么,我只能猜测。

  • 究竟是Password什么?
  • 的价值是password_hash多少?
于 2012-06-07T13:12:10.113 回答