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

これをスキャフォールディングの後に追加しました。これを使用して、passwordとpassword =で十分であると期待していますが、機能していません。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

例外メッセージ「無効なハッシュ」は、ビューが正常に機能していることを示していますUser#passwordが、何らかの理由で失敗します。おそらく、ユーザーはpassword_hashが定義されておらず(つまり、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メソッド内で呼び出すと、user.rbでエラーが発生しますpassword。したがって、19行目は

@password ||= Password.new(password_hash)

そのため、何らかの理由Password.newでの値が気に入らないようです。password_hashまさにその理由、私は推測することしかできません。

  • 正確には何Passwordですか?
  • の価値はpassword_hash何ですか?
于 2012-06-07T13:12:10.113 に答える