2011-05-03 26 views
0

當我取消註釋行'validates_presence_of:username'時,錯誤'無法將字符串轉換爲整數'發生在打開下圖所示的視圖時。當驗證程序取消註釋時導致某些東西停止工作

重新啓動服務器沒有幫助。

型號:

require 'digest/sha1' 
class User < ActiveRecord::Base 
#validates_uniqueness_of :username 
    validates_presence_of :username 
    #has_many :votes 
    #has_many :sentences, :through => :votes 

    def self.make_salt(username="") 
    Digest::SHA1.hexdigest(username+"#{Time.now}#{Kernel.rand}") 
    end 

    def self.hash(password="") 
    Digest::SHA1.hexdigest(password) 
    end 
end 

查看:

<h2>Users</h2> 
<table class="listing" summary="Users list"> 
    <tr class="header"> 
    <th>Username</th> 
    <th>Actions</th> 
    </tr> 
    <% @users.each do |user| %> 
    <tr> 
    <td><%= user.username %></td> 
    <td> 
     <%= link_to('Show',{:action => 'show',:id => user.id}) %> 
    </td> 
    </tr> 
    <% end %> 
</table> 

應用程序跟蹤是空白。

框架跟蹤:

activesupport (3.0.7) lib/active_support/descendants_tracker.rb:23:in `delete' 
activesupport (3.0.7) lib/active_support/descendants_tracker.rb:23:in `clear' 
activesupport (3.0.7) lib/active_support/descendants_tracker.rb:21:in `each' 
activesupport (3.0.7) lib/active_support/descendants_tracker.rb:21:in `clear' 
railties (3.0.7) lib/rails/application/bootstrap.rb:59:in `_callback_after_1' 
activesupport (3.0.7) lib/active_support/callbacks.rb:421:in `_run_call_callbacks' 
actionpack (3.0.7) lib/action_dispatch/middleware/callbacks.rb:44:in `call' 
rack (1.2.2) lib/rack/sendfile.rb:107:in `call' 
actionpack (3.0.7) lib/action_dispatch/middleware/remote_ip.rb:48:in `call' 
actionpack (3.0.7) lib/action_dispatch/middleware/show_exceptions.rb:47:in `call' 
railties (3.0.7) lib/rails/rack/logger.rb:13:in `call' 
rack (1.2.2) lib/rack/runtime.rb:17:in `call' 
activesupport (3.0.7) lib/active_support/cache/strategy/local_cache.rb:72:in `call' 
rack (1.2.2) lib/rack/lock.rb:11:in `call' 
rack (1.2.2) lib/rack/lock.rb:11:in `synchronize' 
rack (1.2.2) lib/rack/lock.rb:11:in `call' 
actionpack (3.0.7) lib/action_dispatch/middleware/static.rb:30:in `call' 
railties (3.0.7) lib/rails/application.rb:168:in `call' 
railties (3.0.7) lib/rails/application.rb:77:in `send' 
railties (3.0.7) lib/rails/application.rb:77:in `method_missing' 
railties (3.0.7) lib/rails/rack/log_tailer.rb:14:in `call' 
rack (1.2.2) lib/rack/content_length.rb:13:in `call' 
rack (1.2.2) lib/rack/handler/webrick.rb:52:in `service' 
/usr/lib64/ruby/1.8/webrick/httpserver.rb:104:in `service' 
/usr/lib64/ruby/1.8/webrick/httpserver.rb:65:in `run' 
/usr/lib64/ruby/1.8/webrick/server.rb:173:in `start_thread' 
/usr/lib64/ruby/1.8/webrick/server.rb:162:in `start' 
/usr/lib64/ruby/1.8/webrick/server.rb:162:in `start_thread' 
/usr/lib64/ruby/1.8/webrick/server.rb:95:in `start' 
/usr/lib64/ruby/1.8/webrick/server.rb:92:in `each' 
/usr/lib64/ruby/1.8/webrick/server.rb:92:in `start' 
/usr/lib64/ruby/1.8/webrick/server.rb:23:in `start' 
/usr/lib64/ruby/1.8/webrick/server.rb:82:in `start' 
rack (1.2.2) lib/rack/handler/webrick.rb:13:in `run' 
rack (1.2.2) lib/rack/server.rb:213:in `start' 
railties (3.0.7) lib/rails/commands/server.rb:65:in `start' 
railties (3.0.7) lib/rails/commands.rb:30 
railties (3.0.7) lib/rails/commands.rb:27:in `tap' 
railties (3.0.7) lib/rails/commands.rb:27 
script/rails:6:in `require' 
script/rails:6 

Scheme.rb:(與用戶表部分)

create_table "users", :force => true do |t| 
    t.string "username" 
    t.string "e-mail" 
    t.string "hashed_password" 
    t.string "salt" 
    t.datetime "created_at" 
    t.datetime "updated_at" 
end 

add_index "users", ["username"], :name => "index_users_on_username" 

爲什麼會出現這種情況?

+0

你能從錯誤中發佈回溯嗎? – 2011-05-03 16:34:43

+0

@dmarkow發佈 – stralep 2011-05-03 17:01:22

+1

您可以發佈schema.rb文件嗎? – moritz 2011-05-03 17:21:08

回答

0

試試這個在您的遷移: add_index「用戶」,[「用戶名」]:名稱=>「index_users_on_username」,獨特=>真

也許他能解決它和它的更好,如果你真的想在數據庫中驗證用戶名的唯一性

+0

add_index「users」,[「username」],:name =>「index_users_on_username」,:unique => true並沒有幫助...它仍然是一樣的 – stralep 2011-05-03 20:51:46

+0

您確定您的數據庫中沒有重複的用戶名?因爲它寫在這裏:http://apidock.com/rails/ActiveRecord/Validations/ClassMethods/validates_uniqueness_of,它可能會導致競爭條件的麻煩 – Dinatih 2011-05-03 21:43:33

+0

數據庫是空的。當用戶很少時,它仍然不起作用。 – stralep 2011-05-03 22:01:18

相關問題