【问题标题】:Uninitialized constant Contact (NameError) when trying to add a record尝试添加记录时未初始化的常量 Contact (NameError)
【发布时间】:2013-06-18 08:17:25
【问题描述】:

型号contact.rb:

class Contact < ActiveRecord::Base
  attr_accessible :name, :phone
end

Test.rb:

Contact.create({:name => "Josh", :phone => "123-456789"})

当我从终端运行 test.rb 时,我收到了错误:

lib/tasks/test.rb:1:in `': 未初始化的常量 (名称错误)

数据库.yml:

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

我相信这是一个微不足道的问题。我已经搜索过这个论坛,但它没有提供任何线索。

让我知道我是否需要输入其他信息才能清楚。

【问题讨论】:

  • 如何运行测试?
  • 来自终端。我打算让它成为一个计划任务。

标签: ruby ruby-on-rails-3 sqlite activerecord uninitialized-constant


【解决方案1】:

您不能简单地运行ruby lib/tasks/test.rb,因为不会加载 Rails 环境。要解决此问题,您需要使用 rake 任务。

您首先必须将文件 lib/tasks/test.rb 重命名为 lib/tasks/test.rake

然后,您需要将此添加到test.rake

namespace :contact do # This is not require. It can work without having to nest your task within a namespace.
  desc 'Add contact'
  task 'add' => [:environment]  do #Here, we specify we want to load the environment
    Contact.create({:name => "Josh", :phone => "123-456789"})
  end
end

然后,运行rake -T,它将列出所有可用的任务。

您将能够使用rake contact:add 启动您的任务。

要安排您的任务在特定时间运行,您可能需要查看Whenever gem。

希望对你有帮助。

【讨论】:

  • 谢谢,我知道Whenever gem。当我按照上面的建议运行时,我收到了错误:rake aborted!未初始化的常量 Inflector /home/askar/Dropbox/rails_studio/sqltest/config/environment.rb:7:in &lt;top (required)&gt;' /home/askar/.rvm/gems/ruby-1.9.3-p429/gems/railties-3.2.13/lib/rails/application.rb:103:in require' /home/askar/.rvm/gems/ruby-1.9.3-p429/gems/railties- 3.2.13/lib/rails/application.rb:103:in `require_environment!' ...我不能把所有的错误信息,因为它很长。
  • 你在 config/environment.rb 中有什么?任何自定义声明?
  • 哦,抱歉,在我发表这篇文章之前,我有一个自定义声明。一旦我删除它,它就起作用了。非常感谢! :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-11-13
  • 1970-01-01
  • 1970-01-01
  • 2015-01-19
  • 2015-10-29
  • 1970-01-01
相关资源
最近更新 更多