2010-09-23 28 views
5

Tôi đã thấy một số ứng dụng có một vài tác vụ cào đi kèm để tải dữ liệu. Tôi không nói về dữ liệu hạt giống, tôi biết về db ​​/ seeds.rb, thay vào đó tôi đề cập đến dữ liệu như người dùng mặc định và hồ sơ cơ bản giúp tôi điền vào đơn đăng ký của mình với một cái gì đó để xem xét. Tôi không muốn sử dụng db: đồ đạc: tải bởi vì tôi không có bất kỳ kiểm soát này ...Nhiệm vụ Rake để thêm dữ liệu mặc định

Tôi muốn có công việc cào như thế này:

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

Trường hợp 'xóa Tác vụ rake sẽ xóa tất cả dữ liệu mà tôi chỉ định trong tác vụ rake, ứng dụng 'tải' sẽ tải dữ liệu mặc định từ nhiệm vụ vào ứng dụng và tác vụ 'tải lại' sẽ xóa tất cả dữ liệu, sau đó tải nó trong ứng dụng. Làm thế nào để làm một cái gì đó như thế này?

Nếu bạn có thể cho tôi ví dụ tôi có mô hình có tên 'Liên hệ' và một số trường - về cơ bản cách thêm hoặc xóa dữ liệu từ các trường đó trong tác vụ cào, tôi sẽ đánh giá cao nó!

Chỉ để cung cấp cho bạn ý tưởng, tôi chủ yếu sẽ sử dụng các tác vụ này khi tôi chuyển từ máy tính này sang máy tính khác để phát triển. Tôi không muốn tự nhập các bản ghi mặc định (chẳng hạn như người dùng của tôi để đăng nhập với) vì vậy tôi chỉ có thể làm rake myapp: dữ liệu: tải lại - điều này sẽ sau khi làm rake db: schema: load

Cảm ơn bạn,

BN

Trả lời

7

Tạo một file lib/nhiệm vụ/data.rake và viết đoạn mã sau:

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 

Vì vậy, bây giờ bạn đã xác định nhiệm vụ cào của bạn. Tôi đang sử dụng database_cleaner đá quý, vì vậy bạn sẽ cần phải cài đặt nó:

sudo gem install database_cleaner 

Bây giờ, rake myapp:data:load về cơ bản là tải dữ liệu từ một tập tin gọi là db/data.rb. Bạn có thể đặt tên cho nó bất cứ điều gì bạn muốn miễn là bạn sử dụng tên tệp trong tác vụ rake hoặc bạn có thể sử dụng nhiều tệp nếu bạn muốn ... Vì vậy, hãy tạo tệp db/data.rb và đặt tất cả mã mà bạn cần ...

User.create(...) 
+0

Cảm ơn bạn đã trả lời nhanh chóng! Tôi đã làm chính xác như bạn đã nói, nhưng đối với một số lý do nó không tìm thấy tập tin db/data.rb. Đây là lỗi tôi nhận được: – dingalingchickenwiing

+0

rake hủy bỏ! không có tệp nào để tải - db/data.rb (Xem toàn bộ dấu vết bằng cách chạy tác vụ với --trace) bash $ – dingalingchickenwiing

+0

Tôi đã thử mọi thứ ... Nó sẽ không tìm thấy ../db/data.rb , ../../db/data.rb hoặc db/data.rb - Tôi không có may mắn. Hãy giúp tôi. :( – dingalingchickenwiing

Các vấn đề liên quan