Неинициализированная константа Contact (NameError) при попытке добавить запись

Модель контакт.рб:

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

Тест.рб:

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

Когда я запускаю test.rb из терминала, я получаю сообщение об ошибке:

lib/tasks/test.rb:1:in `': неинициализированная константа Contact (NameError)

база данных.yml:

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

Я считаю, что это тривиальный вопрос. Я искал этот форум, но он не дал никакой подсказки по этому поводу.

Дайте мне знать, если мне нужно будет ввести дополнительную информацию, чтобы было понятно.


person Askar    schedule 18.06.2013    source источник
comment
Как вы проводите тест?   -  person toro2k    schedule 18.06.2013
comment
от терминала. Я планирую сделать это запланированным заданием.   -  person Askar    schedule 18.06.2013


Ответы (1)


Вы не можете просто запустить ruby lib/tasks/test.rb, потому что среда Rails не будет загружена. Чтобы это исправить, нужно использовать rake task.

Сначала вам нужно переименовать файл 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.

Чтобы запланировать выполнение задачи в определенное время, вы можете взглянуть на гем Когда .

Надеюсь, поможет.

person Arkan    schedule 18.06.2013
comment
спасибо, я знаю о жемчужине Whenever. Когда я запускаю, следуя вашему совету выше, я получаю сообщение об ошибке: rake aborted! неинициализированная константа Inflector /home/askar/Dropbox/rails_studio/sqltest/config/environment.rb:7:in <top (required)>' /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!' ... Я не мог поместить все сообщения об ошибках, так как они длинные. - person Askar; 18.06.2013
comment
Что у вас есть в config/environment.rb? Любое пользовательское заявление? - person Arkan; 18.06.2013
comment
О, извините, у меня было специальное заявление, прежде чем я сделал этот пост. Как только я удалил его, это сработало. Большое спасибо! :) - person Askar; 18.06.2013