Nic*_*ick 30 rails-console ruby-on-rails-4
我有一个名为PhoneNumber的简单模型:
class PhoneNumber < ActiveRecord::Base
validates :pnumber, presence: true, on: :create #=> { :message => " cannot be blank" }
validates :pnumber, numericality: true, on: :create
end
Run Code Online (Sandbox Code Playgroud)
我转到应用程序的根文件夹(包含app子文件夹的文件夹)并启动控制台:
rails console --sandbox
Run Code Online (Sandbox Code Playgroud)
当我尝试创建一个空的PhoneNumber(我想得到一个错误消息,因为验证失败)我收到以下错误消息:
2.0.0-p451 :001 > PhoneNumber.new
NameError: uninitialized constant PhoneNumber
from (irb):1
from /Users/nnikolo/.rvm/gems/ruby-2.0.0-p451@railstutorial_rails_4_0/gems/railties-4.1.5/lib/rails/commands/console.rb:90:in `start'
from /Users/nnikolo/.rvm/gems/ruby-2.0.0-p451@railstutorial_rails_4_0/gems/railties-4.1.5/lib/rails/commands/console.rb:9:in `start'
from /Users/nnikolo/.rvm/gems/ruby-2.0.0-p451@railstutorial_rails_4_0/gems/railties-4.1.5/lib/rails/commands/commands_tasks.rb:69:in `console'
from /Users/nnikolo/.rvm/gems/ruby-2.0.0-p451@railstutorial_rails_4_0/gems/railties-4.1.5/lib/rails/commands/commands_tasks.rb:40:in `run_command!'
from /Users/nnikolo/.rvm/gems/ruby-2.0.0-p451@railstutorial_rails_4_0/gems/railties-4.1.5/lib/rails/commands.rb:17:in `<top (required)>'
from /Users/nnikolo/.rvm/gems/ruby-2.0.0-p451@railstutorial_rails_4_0/gems/railties-4.1.5/lib/rails/app_rails_loader.rb:43:in `require'
from /Users/nnikolo/.rvm/gems/ruby-2.0.0-p451@railstutorial_rails_4_0/gems/railties-4.1.5/lib/rails/app_rails_loader.rb:43:in `block in exec_app_rails'
from /Users/nnikolo/.rvm/gems/ruby-2.0.0-p451@railstutorial_rails_4_0/gems/railties-4.1.5/lib/rails/app_rails_loader.rb:32:in `loop'
from /Users/nnikolo/.rvm/gems/ruby-2.0.0-p451@railstutorial_rails_4_0/gems/railties-4.1.5/lib/rails/app_rails_loader.rb:32:in `exec_app_rails'
from /Users/nnikolo/.rvm/gems/ruby-2.0.0-p451@railstutorial_rails_4_0/gems/railties-4.1.5/lib/rails/cli.rb:5:in `<top (required)>'
from /Users/nnikolo/.rvm/gems/ruby-2.0.0-p451@railstutorial_rails_4_0/gems/railties-4.1.5/bin/rails:9:in `require'
from /Users/nnikolo/.rvm/gems/ruby-2.0.0-p451@railstutorial_rails_4_0/gems/railties-4.1.5/bin/rails:9:in `<top (required)>'
from /Users/nnikolo/.rvm/gems/ruby-2.0.0-p451@railstutorial_rails_4_0/bin/rails:23:in `load'
from /Users/nnikolo/.rvm/gems/ruby-2.0.0-p451@railstutorial_rails_4_0/bin/rails:23:in `<main>'
from /Users/nnikolo/.rvm/gems/ruby-2.0.0-p451@railstutorial_rails_4_0/bin/ruby_executable_hooks:15:in `eval'
from /Users/nnikolo/.rvm/gems/ruby-2.0.0-p451@railstutorial_rails_4_0/bin/2.2.2.02.02.02.0.2.2.02.222222.2.02.02.0.2.2.022222222222222
Run Code Online (Sandbox Code Playgroud)
似乎控制台不知道该模型.在普通的ruby中你需要'需要'包含类的文件,但我认为rails控制台应该自动加载所有模型.这里发生了什么?
Dan*_*fan 48
有些事要尝试:
重启rails控制台; 对模型的更改只会被已经打开的rails控制台> reload!(虽然我发现这是不可预测的)或通过重新启动控制台获取.
您的模型文件名为"phone_number.rb",是否在"/ app/models"中?
您应该仔细检查rails console命令中的"--sandbox"选项.AFAIK,这可以防止变化.不用开关就试试吧.
mor*_*ees 23
我收到了错误:
NameError: uninitialized constant
然后我注意到我不小心创建了一个复数模型,所以我回去并将模型文件重命名为单数,并将模型文件中的类名更改为单数并解决了它.
我开始从Rails的5.1升级到5.2后有这个问题
它得到了与解决:
spring stop
spring binstub --all
spring start
rails s
Run Code Online (Sandbox Code Playgroud)
如果以上方法都不起作用,我还有不同的方法,因为它发生在我的真实场景中。
更具体地说,使用Thrift自动生成的 Ruby 文件。
在我的情况下,我有Module多个类,因此在这种情况下顺序很重要:
Class AClass B在同一模块中使用。然而,Class B是在之后 Class A宣布的。
只需在解决我的问题之前Class B进行声明即可。 Class A
我也直接在models目录中遇到了这个文件,结果发现我在启动时没有正确加载代码.我能够通过设置config.eager_load = true我的development.rb文件来解决问题.这使我可以在控制台中使用该类
| 归档时间: |
|
| 查看次数: |
110842 次 |
| 最近记录: |