Rake中模型引用的未初始化常量错误

Jac*_*R-G 3 rake model ruby-on-rails-3

在我的sample_data.rake文件中,我有命令" Diner.create!(...)"导致" uninitialized constant Diner"错误.但是,如果我在Rails控制台中执行相同的"Diner.create!(...)"命令,则表示成功.如果我在sample_data.rake文件中"需要"模型,我会得到错误" ActiveRecord::ConnectionNotEstablished",其中backtrace显示为" active_record/connection_adapters/abstract/connection_pool.rb:318:in retrieve_connection'".这是我的diner.rb文件:

class Diner < ActiveRecord::Base
  has_many  :redemptions
  has_many  :surveys, :through => :redemptions
end
Run Code Online (Sandbox Code Playgroud)

并且导致问题的sample_data.rake文件中的代码是:

99.times do |n|
  gender = rand(1) == 0 ? "male" : "female"
  birthdate = Date.ordinal(DateTime.now.year - 13 - rand(62), rand(364)+1)
  Diner.create!(:gender => gender, :birthdate => birthdate)
end
Run Code Online (Sandbox Code Playgroud)

删除上述代码会导致文件成功处理.而且,正如我之前所说,上面的代码在rails控制台中正常工作.

kri*_*ard 9

您的rake任务显然缺少rails环境.如果您的任务具有以下结构且您的模型位于其中,$LOAD_PATH那么一切都应该没问题:

     namespace :yourapp do
         desc "Create sample data"
         task :populate => :environment do
           # create other data
           99.times do |n|
             gender = rand(1) == 0 ? "male" : "female"
             birthdate = Date.ordinal(DateTime.now.year - 13 - rand(62), rand(364)+1)
             Diner.create!(:gender => gender, :birthdate => birthdate)
           end
         end
     end
Run Code Online (Sandbox Code Playgroud)

你看到那task :populate => :environment do行,它告诉rake启动环境任务[1],然后执行你现在可以访问你的模型和数据库的任务

[1] railties-3.0.4/LIB /轨道/ application.rb中#214

[1] railties-3.0.4/LIB /轨道/ application.rb中#101

干杯