2011-08-28 99 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

編輯模型文件時,同時自動檢測運行

所以才停止自動測試,然後再次啓動它(如果你想)

相關問題