Rails Rake任务 - 访问模型类

Jay*_*dse 40 ruby-on-rails rake-task

我想定义一个Ruby(1.9.2)-on-Rails(3.0.5)rake任务,它将用户添加到User表中.该文件如下所示:

#lib/tasks/defaultuser.rake
require 'rake'
namespace :defaultuser do
  task :adduser do 
    u=User.new
    u.email="bob@example.com"
    u.password="password"
    u.save
    u.errors.each{|e| p e}
  end
end
Run Code Online (Sandbox Code Playgroud)

然后我会调用任务为

> rake defaultuser:adduser
Run Code Online (Sandbox Code Playgroud)

我测试了Rails控制台中的adduser任务中的代码,它运行正常.我测试了rake任务,只运行

print "defaultuser:adduser"
Run Code Online (Sandbox Code Playgroud)

在任务的主体,它工作得很好.

然而,当我把它们结合起来时,它抱怨道,说道

rake aborted!
uninitialized constant User
Run Code Online (Sandbox Code Playgroud)

我试过了

require File.expand_path('../../../app/models/user.rb', __FILE__)
Run Code Online (Sandbox Code Playgroud)

在rake文件中的命名空间定义之上,但是没有用.我有

rake aborted!
ActiveRecord::ConnectionNotEstablished
Run Code Online (Sandbox Code Playgroud)

我需要做什么才能在Rails控制台的Rake任务中对User模型类具有相同的访问权限?

tob*_*ris 99

你很接近:)

#lib/tasks/defaultuser.rake
require 'rake'
namespace :defaultuser do
  task :adduser => :environment do
    ...
  end
Run Code Online (Sandbox Code Playgroud)

注意使用:environment,它在调用rake任务之前设置必要的Rails环境.之后,您的User对象将在范围内.

  • Ahhhhhhhhhhhhh!我很接近.我不懂语法. (3认同)