2011-08-28 148 views
0

因此,根据Railsspace上的教程,我想使用控制台了解活动记录。所以我做了那些事情说我应该做的事,这是我得到的结果。NameError:未初始化的常量User :: SCREEN_NAME_RANGE

有谁知道问题出在哪里?

$ rails console 

输出

Loading development environment (Rails 3.0.10) 
ruby-1.9.2-p290 :001 > user = User.new(:screen_name => "me", 
ruby-1.9.2-p290 :002 >  :email => "", 
ruby-1.9.2-p290 :003 >  :password => "a",) 
NameError: uninitialized constant User::SCREEN_NAME_RANGE 
    from /Users/dennisbuizert/Sites/gpoff/app/models/user.rb:3:in `<class:User>' 
    from /Users/dennisbuizert/Sites/gpoff/app/models/user.rb:1:in `<top (required)>' 
    from (irb):1 
    from /Users/dennisbuizert/.rvm/gems/ruby-1.9.2-p290/gems/railties-3.0.10/lib/rails/commands/console.rb:44:in `start' 
    from /Users/dennisbuizert/.rvm/gems/ruby-1.9.2-p290/gems/railties-3.0.10/lib/rails/commands/console.rb:8:in `start' 
    from /Users/dennisbuizert/.rvm/gems/ruby-1.9.2-p290/gems/railties-3.0.10/lib/rails/commands.rb:23:in `<top (required)>' 
    from script/rails:6:in `require' 
    from script/rails:6:in `<main>' 

用户模型

class User < ActiveRecord::Base 
    validates_uniqueness_of :screen_name, :email 
    validates_length_of  :screen_name, :within => SCREEN_NAME_RANGE 
    validates_length_of  :password, :within => PASSWORD_RANGE 
    validates_length_of  :email,  :maximum => EMAIL_MAX_LENGTH 
    validates_presence_of :email 

    # Max & Min length for all fields 
    SCREEN_NAME_MIN_LENGTH = 3 
    SCREEN_NAME_MAX_LENGTH = 20 
    PASSWORD_MIN_LENGTH  = 8 
    PASSWORD_MAX_LENGTH  = 26 
    EMAIL_MAX_LENGTH  = 50 
    SCREEN_NAME_RANGE = SCREEN_NAME_MIN_LENGHT..SCREEN_NAME_MAX_LENGTH 
    PASSWORD_RANGE = PASSWORD_MIN_LENGHT..PASSWORD_MAX_LENGTH 

end 

我使用SQLite3的,而不是MySQL的,因为我无法弄清楚如何使用MySQL,以及如何让该工作更换sqlite3的。

+0

唐发生此问题当用户想要使用MySQL时,不要使用SQLite3,因为你无法弄清楚如何使用它。有些人(包括我自己)会很乐意帮助你。至于你的问题,你可以发布一下你的用户模型代码吗? – Max

+0

我更新了它,最大。 – dbuizert

回答

0

要获得sqlite的工作,请确保您有行gem sqlite3Gemfile,运行bundle install,让你的部分在config/database.yml是这个样子:

development: 
    adapter: sqlite3 
    database: db/development.sqlite3 
    pool: 5 
    timeout: 5000 

对于SCREEN_NAME_RANGE错误,我可以”不知道你的代码是从哪里来的(假设上面的配置更改没有修复它)。如果你确定你的文件与教程中显示的完全一样,我会联系作者,因为它是一个非免费的文档集。您可能想要查看http://guides.rubyonrails.org/。他们有很大的警告,说他们不完整,但大多数情况下他们写得很好(并且由公共活动的社区成员贡献),而且是免费的。

+1

Sqlite3已安装,它在默认情况下安装了所有内容。虽然没有解决问题。 – dbuizert

4

我看到错误来自哪里。您必须在验证之前声明常量。当类加载时,你在验证中引用的常量还没有被声明,因此是错误。

您的代码应该是这样的:

class User < ActiveRecord::Base 

    # Max & Min length for all fields 
    SCREEN_NAME_MIN_LENGTH = 3 
    SCREEN_NAME_MAX_LENGTH = 20 
    PASSWORD_MIN_LENGTH  = 8 
    PASSWORD_MAX_LENGTH  = 26 
    EMAIL_MAX_LENGTH  = 50 
    SCREEN_NAME_RANGE = SCREEN_NAME_MIN_LENGHT..SCREEN_NAME_MAX_LENGTH 
    PASSWORD_RANGE = PASSWORD_MIN_LENGHT..PASSWORD_MAX_LENGTH 

    validates_uniqueness_of :screen_name, :email 
    validates_length_of  :screen_name, :within => SCREEN_NAME_RANGE 
    validates_length_of  :password, :within => PASSWORD_RANGE 
    validates_length_of  :email,  :maximum => EMAIL_MAX_LENGTH 
    validates_presence_of :email 

end 
+1

它没有改变任何可悲的事情。仍在控制台中产生错误。 – dbuizert

+0

它会产生相同的堆栈跟踪错误?我99%的肯定你的订购是一个错误,所以我觉得这可能是一个新的错误。 – Max

+0

'ActiveRecord :: UnknownAttributeError:未知属性:screen_name' 这是它修复文本错误后产生的错误...我有几个T和H的切换。 – dbuizert

0

编辑模型文件时,同时自动检测运行

所以才停止自动测试,然后再次启动它(如果你想)

相关问题