2012-06-07 41 views
1

我試圖用改變來支持bcrypt密碼的模型,像這樣你如何在Rails模型和form_for中使用自定義函數?

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

這是在新功能 完整的bac根據要求的ktrace:

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' 

回答

1

異常消息「無效的哈希值」表示你的觀點是工作得很好,但User#password失敗,無論出於何種原因。也許用戶沒有定義password_hash(即它是零,「」或其他無效值),導致Password.new錯誤?

看着你回溯似乎加強這一點:調用newpassword方法內時user.rb發生

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'. 

錯誤。因此,我猜測線#19是

@password ||= Password.new(password_hash) 

所以看起來Password.new不喜歡的password_hash出於某種原因的價值。究竟爲什麼,我只能猜測。

  • 究竟是什麼Password
  • password_hash的值是多少?
+0

@JacobS添加了日誌中的所有內容 – nekosune

+0

根據您的日誌更新了我的答案和更多結論。 –

+0

密碼密碼是由寶石爲bcrypt添加的東西,因爲這是一個新的領域,我可以猜測它的dosnt像一個零/空白字段被傳遞。謝謝 – nekosune

相關問題