内部服务器错误无法将String转换为整数(在Rails中)

时间:2013-11-07 09:34:21

标签: ruby-on-rails ruby ruby-on-rails-3.1 mysql2

我在运行迁移后运行我的应用程序时收到此错误,其中我删除了一列并添加了2个新列。我收到此错误

    Internal Server Error can't convert String into Integer 

在我的应用的每个视图/页面上?我是铁杆新手。需要帮忙。提前谢谢。

    [2013-11-07 04:26:57] ERROR TypeError: can't convert String into Integer
/home/faraz/.rvm/gems/ruby-1.9.3-p448/gems/activesupport-3.1.1/lib/active_support/descendants_tracker.rb:22:in `delete'
/home/faraz/.rvm/gems/ruby-1.9.3-p448/gems/activesupport-3.1.1/lib/active_support/descendants_tracker.rb:22:in `block in clear'
/home/faraz/.rvm/gems/ruby-1.9.3-p448/gems/activesupport-3.1.1/lib/active_support/descendants_tracker.rb:20:in `each'
/home/faraz/.rvm/gems/ruby-1.9.3-p448/gems/activesupport-3.1.1/lib/active_support/descendants_tracker.rb:20:in `clear'
/home/faraz/.rvm/gems/ruby-1.9.3-p448/gems/railties-3.1.1/lib/rails/application/bootstrap.rb:56:in `block (2 levels) in <module:Bootstrap>'
/home/faraz/.rvm/gems/ruby-1.9.3-p448/gems/activesupport-3.1.1/lib/active_support/callbacks.rb:404:in `_run_cleanup_callbacks'
/home/faraz/.rvm/gems/ruby-1.9.3-p448/gems/activesupport-3.1.1/lib/active_support/callbacks.rb:81:in `run_callbacks'
/home/faraz/.rvm/gems/ruby-1.9.3-p448/gems/actionpack-3.1.1/lib/action_dispatch/middleware/reloader.rb:51:in `cleanup!'
/home/faraz/.rvm/gems/ruby-1.9.3-p448/gems/actionpack-3.1.1/lib/action_dispatch/middleware/reloader.rb:62:in `close'
/home/faraz/.rvm/gems/ruby-1.9.3-p448/gems/rack-1.3.5/lib/rack/body_proxy.rb:14:in `close'

    /home/faraz/.rvm/gems/ruby-1.9.3-p448/gems/railties-3.1.1/lib/rails/rack/content_length.rb:30:in `call'
/home/faraz/.rvm/gems/ruby-1.9.3-p448/gems/railties-3.1.1/lib/rails/rack/log_tailer.rb:14:in `call'
/home/faraz/.rvm/gems/ruby-1.9.3-p448/gems/rack-1.3.5/lib/rack/handler/webrick.rb:59:in `service'
/home/faraz/.rvm/rubies/ruby-1.9.3-p448/lib/ruby/1.9.1/webrick/httpserver.rb:138:in `service'
/home/faraz/.rvm/rubies/ruby-1.9.3-p448/lib/ruby/1.9.1/webrick/httpserver.rb:94:in `run'
/home/faraz/.rvm/rubies/ruby-1.9.3-p448/lib/ruby/1.9.1/webrick/server.rb:191:in `block in start_thread'
    [2013-11-07 04:27:04] ERROR TypeError: can't convert String into Integer
/home/faraz/.rvm/gems/ruby-1.9.3-p448/gems/activesupport-3.1.1/lib/active_support/descendants_tracker.rb:22:in `delete'
/home/faraz/.rvm/gems/ruby-1.9.3-p448/gems/activesupport-3.1.1/lib/active_support/descendants_tracker.rb:22:in `block in clear'
/home/faraz/.rvm/gems/ruby-1.9.3-p448/gems/activesupport-3.1.1/lib/active_support/descendants_tracker.rb:20:in `each'
/home/faraz/.rvm/gems/ruby-1.9.3-p448/gems/activesupport-3.1.1/lib/active_support/descendants_tracker.rb:20:in `clear'
/home/faraz/.rvm/gems/ruby-1.9.3-p448/gems/railties-3.1.1/lib/rails/application/bootstrap.rb:56:in `block (2 levels) in <module:Bootstrap>'
/home/faraz/.rvm/gems/ruby-1.9.3-p448/gems/activesupport-3.1.1/lib/active_support/callbacks.rb:404:in `_run_cleanup_callbacks'
/home/faraz/.rvm/gems/ruby-1.9.3-p448/gems/activesupport-3.1.1/lib/active_support/callbacks.rb:81:in `run_callbacks'
/home/faraz/.rvm/gems/ruby-1.9.3-p448/gems/actionpack-3.1.1/lib/action_dispatch/middleware/reloader.rb:51:in `cleanup!'
/home/faraz/.rvm/gems/ruby-1.9.3-p448/gems/actionpack-3.1.1/lib/action_dispatch/middleware/reloader.rb:62:in `close'
/home/faraz/.rvm/gems/ruby-1.9.3-p448/gems/rack-1.3.5/lib/rack/body_proxy.rb:14:in `close'
/home/faraz/.rvm/gems/ruby-1.9.3-p448/gems/railties-3.1.1/lib/rails/rack/content_length.rb:30:in `call'
/home/faraz/.rvm/gems/ruby-1.9.3-p448/gems/railties-3.1.1/lib/rails/rack/log_tailer.rb:14:in `call'
/home/faraz/.rvm/gems/ruby-1.9.3-p448/gems/rack-1.3.5/lib/rack/handler/webrick.rb:59:in `service'
/home/faraz/.rvm/rubies/ruby-1.9.3-p448/lib/ruby/1.9.1/webrick/httpserver.rb:138:in `service'
/home/faraz/.rvm/rubies/ruby-1.9.3-p448/lib/ruby/1.9.1/webrick/httpserver.rb:94:in `run'
/home/faraz/.rvm/rubies/ruby-1.9.3-p448/lib/ruby/1.9.1/webrick/server.rb:191:in `block in start_thread

我运行了这次迁移

class AddHashedColumns < ActiveRecord::Migration
  def change
    remove_column :i_users, :password
    add_column :i_users, :hashed_password, :string
    add_column :i_users, :salt, :string 
  end
end

我的模型代码就是这个

require 'digest/sha1'

class IUser < ActiveRecord::Base

# a non database attribute
attr_accessor :password

has_one :e_user
has_one :j_user
has_one :s_user

validates_presence_of :first_name
validates_presence_of :last_name
#validates :password, presence: true, :length => { :minimum => 6}
validates_uniqueness_of :email, :message => ": This email is already registered!"
validates_presence_of :email

    #validate password only on create, i.e. on update user can update other fields
    #without changing password
    validates_length_of :password, :within =>6..30, :on => :create

before_save :create_hashed_password
after_save :clear_password

attr_protected :hashed_password, :salt

def self.authenticate(email="", password="")

    user = IUser.find_by_email(email)

    if user && user.hashed_password==IUser.hash_with_salt(password, user.salt)
        return user
    else
        return false
    end
end

def self.make_salt(email="")
    Digest::SHA1.hexdigest("Use #{email} with #{Time.now} to make a solid salt!")
end

def self.hash_with_salt(password="", salt="")
    Digest::SHA1.hexdigest("Put #{salt} on the #{password}")
end

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

private

def create_hashed_password
    #when password is present, we hash it
    unless password.blank?
        #make a salt, if not made yet
        self.salt = IUser.make_salt(email) if salt.blank?
        self.hashed_password = IUser.hash_with_salt(password, salt)
    end
end

def clear_password
    self.password = nil
end
end

这是我的宝石文件

    #---------------------------------GEM FILE      ---------------------------------------------
    source 'http://rubygems.org'


   # Bundle edge Rails instead:
   # gem 'rails', :git => 'git://github.com/rails/rails.git'

   ruby '1.9.3'
   gem  'mysql2'

   # gem 'rails', '3.2.14'
# gem install activerecord-mysql2-adapter


# Use unicorn as the web server
# gem 'unicorn'

# Deploy with Capistrano
# gem 'capistrano'

# To use debugger (ruby-debug for Ruby 1.8.7+, ruby-debug19 for Ruby 1.9.2+)
# gem 'ruby-debug'
# gem 'ruby-debug19', :require => 'ruby-debug'

# Bundle the extra gems:
# gem 'bj'
# gem 'nokogiri'
# gem 'sqlite3-ruby', :require => 'sqlite3'
# gem 'aws-s3', :require => 'aws/s3'

# Bundle gems for the local environment. Make sure to
# put test-only gems in this group so their generators
# and rake tasks are available in development mode:
# group :development, :test do
#   gem 'webrat'
# end

gem "hirb"
#gem "will_paginate"
#gem "kaminari"
#gem 'rd_searchlogic', :require => 'searchlogic', :git => 'git://github.com/railsdog/searchlogic.git'
#gem "searchlogic"
#gem "activesupport"

gem "devise"
gem "cancan"
gem "jquery-rails"
#gem "rspec-rails", ">= 2.0.1", :group => [:development, :test]
#gem "capybara", :group => [:development, :test]
gem 'twitter-bootstrap-rails', :git => 'http://github.com/seyhunak/twitter-bootstrap-rails.git'

#------------------------------------------------------------------------------------------------------------------------------------

我试图在Firefox和Chromium上运行我的应用程序,同时清除了Cookie,两者都出现了同样的错误。

1 个答案:

答案 0 :(得分:0)

我使用旧版本的项目解决了错误,并使用带有以上给定迁移的db。然后我开始在我的项目中输入新的模型代码,并运行项目,错误消失了! 感谢