Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/57.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails NameError:未初始化的常量用户::屏幕\u名称\u范围_Ruby On Rails - Fatal编程技术网

Ruby on rails NameError:未初始化的常量用户::屏幕\u名称\u范围

Ruby on rails NameError:未初始化的常量用户::屏幕\u名称\u范围,ruby-on-rails,Ruby On Rails,因此,根据Railsspace教程,我假设使用控制台来理解活动记录。所以我做了我应该做的事情,这就是我得到的结果 有人知道问题出在哪里吗 $ 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 => "

因此,根据Railsspace教程,我假设使用控制台来理解活动记录。所以我做了我应该做的事情,这就是我得到的结果

有人知道问题出在哪里吗

   $ 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>'
加载开发环境(Rails 3.0.10)
ruby-1.9.2-p290:001>user=user.new(:screen\u name=>“我”,
ruby-1.9.2-p290:002>:email=>“”,
ruby-1.9.2-p290:003>:密码=>“a”,)
NameError:未初始化的常量用户::屏幕\u名称\u范围
from/Users/dennisbuizert/Sites/gpoff/app/models/user.rb:3:in`'
from/Users/dennisbuizert/Sites/gpoff/app/models/user.rb:1:in`'
来自(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'
来自/Users/dennisbuizert/.rvm/gems/ruby-1.9.2-p290/gems/railties-3.0.10/lib/rails/commands.rb:23:in`'
来自脚本/rails:6:in'require'
来自脚本/rails:6:in`'
用户模型

    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
class用户screen\u name\u范围
验证密码的长度,在=>密码范围内
验证以下内容的长度:email,:MAX=>email\u MAX\u length
验证是否存在:电子邮件
#所有字段的最大和最小长度
屏幕名称最小长度=3
屏幕名称最大长度=20
密码\最小\长度=8
密码\最大\长度=26
电子邮件最大长度=50
屏幕名称范围=屏幕名称最小长度..屏幕名称最大长度
密码\u范围=密码\u最小长度..密码\u最大长度
结束

我使用的是SQLite3而不是MySQL,因为我不知道如何用MySQL替换SQLite3以及如何使其工作。

要使sqlite工作,请确保您的
Gemfile
中有行
gem SQLite3
,运行
bundle install
,并使
config/database.yml
中的部分如下所示:

development:
  adapter: sqlite3
  database: db/development.sqlite3
  pool: 5
  timeout: 5000
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
至于SCREEN\u NAME\u RANGE错误,如果没有看到您的代码(假设上面的配置更改无法修复它),我就无法判断这是从哪里来的。如果您完全确定您的文件与教程中显示的完全相同,我会联系作者,因为它是一个非免费文档集


你可能想退房。它们有很大的警告说它们是不完整的,但在大多数情况下它们都写得很好(并且由社区的公开积极贡献成员编写),而且是免费的。

要让sqlite工作,请确保在
Gemfile
中有行
gemsqlite3
,运行
bundle install
,并使
config/database.yml
中的部分如下所示:

development:
  adapter: sqlite3
  database: db/development.sqlite3
  pool: 5
  timeout: 5000
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
至于SCREEN\u NAME\u RANGE错误,如果没有看到您的代码(假设上面的配置更改无法修复它),我就无法判断这是从哪里来的。如果您完全确定您的文件与教程中显示的完全相同,我会联系作者,因为它是一个非免费文档集


你可能想退房。它们有很大的警告说它们是不完整的,但在大多数情况下它们都写得很好(并且是由社区中公开积极贡献的成员编写的),而且是免费的。

我知道错误来自何方。您必须在验证之前声明常量。加载类时,验证中引用的常量尚未声明,因此出现错误

您的代码应该如下所示:

development:
  adapter: sqlite3
  database: db/development.sqlite3
  pool: 5
  timeout: 5000
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
class用户screen\u name\u范围
验证密码的长度,在=>密码范围内
验证以下内容的长度:email,:MAX=>email\u MAX\u length
验证是否存在:电子邮件
结束

我知道错误是从哪里来的。您必须在验证之前声明常量。加载类时,验证中引用的常量尚未声明,因此出现错误

您的代码应该如下所示:

development:
  adapter: sqlite3
  database: db/development.sqlite3
  pool: 5
  timeout: 5000
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
class用户screen\u name\u范围
验证密码的长度,在=>密码范围内
验证以下内容的长度:email,:MAX=>email\u MAX\u length
验证是否存在:电子邮件
结束

在运行自动测试时编辑模型文件时会出现此问题


因此,只需停止自动测试,然后再次启动它(如果需要)

在运行自动测试时编辑模型文件时会出现此问题


因此,只要停止自动测试,然后再次启动它(如果您愿意)

当您想使用MySQL时,不要因为不知道如何使用它而使用SQLite3。有些人(包括我自己)很乐意帮助你。至于您的问题,您能发布一点您的用户模型代码吗?当您想使用MySQL时,不要因为不知道如何使用它而使用SQLite3。有些人(包括我自己)很乐意帮助你。至于你的问题,你能发一封信吗