2011-08-20 24 views
5

Chúng tôi cần thêm dữ liệu hạt giống khác cho một số bảng mới được thêm vào "phiên bản 100" của dự án đường ray của chúng tôi.Có cách nào để có nhiều tệp seed.rb không? Bất kỳ loại 'phiên bản' nào cho dữ liệu hạt giống?

Tuy nhiên, nếu chúng ta chỉ cần thêm nó vào seed.rb và chạy lại lệnh rake db: seed, tất nhiên nó sẽ thêm lại dữ liệu gốc ban đầu, sao chép nó.

Vì vậy, nếu bạn đã thêm dữ liệu hạt giống vào seed.rb, TableOne ... làm cách nào chúng ta có thể thêm dữ liệu hạt giống cho TableTwo và TableThree ở các giai đoạn phát triển sau?

Tôi hy vọng tôi chỉ đơn giản có thể tạo ra một tập tin seeds_two.rb MỚI và chạy rake db:seeds_two nhưng điều đó đã lỗi Don't know how to build task 'db:seeds_two'

Vì vậy, nó trông giống như ONLY "seeds.rb" có thể được sử dụng - Vậy làm thế nào mọi người duy trì bổ sung gia tăng cho dữ liệu hạt giống?

+0

tại sao bạn không thể chạy 'rake db: reset' để tránh trùng lặp? –

+0

Tôi thường lấy mẫu dữ liệu trong bản thân di chuyển để thêm bảng. Mặc dù không lý tưởng, nhưng có vẻ hợp lý. Tôi sẽ được quan tâm để biết những gì coder ray khác làm trong tình hình. – rubish

+0

@nash - doesnt db: đặt lại xóa cơ sở dữ liệu của chúng tôi - ví dụ: tất cả dữ liệu khách hàng thực tế hiện có của chúng tôi? – jpwynn

Trả lời

10

Bạn có thể sử dụng lại tác vụ seed nhưng làm cho nó idempotent.

Để làm cho idempotent hạt giống, chỉ cần kiểm tra sự tồn tại của điều kiện trước khi thực hiện một lệnh. Ví dụ: bạn có muốn tạo người dùng quản trị viên mới không?

User.find_or_create_by_username(:username => "admin") 

thay vì

User.create(:username => "admin") 

Tuy nhiên, seed nên được sử dụng để cư trú cơ sở dữ liệu của bạn khi dự án được tạo ra. Nếu bạn muốn thực hiện việc gieo hạt dữ liệu phức tạp trong suốt vòng đời của ứng dụng, chỉ cần tạo ra một nhiệm vụ cào mới, thực hiện nó sau đó loại bỏ nó.

+2

Câu trả lời hay, cảm ơn bạn. Thêm vào đó, tôi đã học được một từ mới thú vị mà tôi có thể sử dụng tại các bữa tiệc ("Tôi ước lượng calo trong một sundae hot fudge là idempotent"); Nhưng tôi có một câu hỏi ... làm thế nào để bạn xử lý trường hợp khi dự án của bạn phát triển, bạn thêm các trường mới và do đó cần dữ liệu hạt giống mới để đi vào các trường mới đó? Rake? hoặc Seed? – jpwynn

+0

Nếu tôi cần thêm dữ liệu về hạt giống để bao gồm các mô hình mới, tôi sử dụng tệp seed.rb. Nếu tôi chỉ cần điền hoặc thay đổi dữ liệu trong môi trường sản xuất, tôi tạo các tác vụ cào tạm thời. –

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