Rake任务添加默认数据

时间:2010-09-23 20:10:46

标签: ruby-on-rails ruby-on-rails-3 rake

我见过一些应用程序包含一些rake任务来加载数据。我不是在谈论种子数据,我知道db / seeds.rb,而是指的是默认用户和基本记录等数据,这些数据可以帮助我填写我的应用程序。我不想使用db:fixtures:load因为我对此没有任何控制权......

我想要像这样的rake任务:

rake myapp:data:delete
rake myapp:data:load
rake myapp:data:reload

如果'delete'rake任务将删除我在rake任务中指定的所有数据,'load'应用程序会将任务中的默认数据加载到app中,'reload'任务将删除所有数据,然后将其加载到应用程序中。我该怎么办?

如果你能给我一个例子,我有一个名为'Contact'的模型和几个字段 - 基本上如何在rake任务中添加或删除这些字段中的数据,我真的很感激!

只是为了给你一个想法,当我从一台计算机移动到另一台计算机进行开发时,我主要使用这些rake任务。我不想手动输入默认记录(例如我的用户登录)所以我可以做rake myapp:data:reload - 这将是在做rake db:schema:load

之后

谢谢,

BN

1 个答案:

答案 0 :(得分:7)

创建文件lib / tasks / data.rake并编写以下代码:

require File.join(File.dirname(__FILE__), '../../config/environment')
require 'database_cleaner'

namespace :myapp do
  namespace :data do

    task :delete do
      DatabaseCleaner.strategy = :truncation
      DatabaseCleaner.clean
    end

    task :load do
      require 'db/data.rb'
    end

    task :reload do
      Rake::Task['myapp:data:delete'].invoke
      Rake::Task['myapp:data:load'].invoke
    end

  end
end

所以现在你已经定义了你的rake任务了。我正在使用gem database_cleaner,所以你需要安装它:

sudo gem install database_cleaner

现在,rake myapp:data:load基本上是从名为db/data.rb的文件加载数据。只要您在rake任务中使用文件名,就可以将它命名为您想要的任何名称,或者如果您愿意,可以使用多个文件...所以创建文件db/data.rb并放置您需要的所有代码...

User.create(...)