2010-12-26 34 views
10

Tôi muốn chia tệp seed.rb của mình thành nhiều phần để dễ bảo trì; hạt giống tất cả các A trong a.rb, B trong b.rb, vv Các tệp riêng biệt được đặt trong thư mục db/với seed.rb. Mỗi tập tin bao gồm một loạt các cuộc gọi "A.create" hoặc "B.create" và tôi muốn gọi những tập tin đó từ seed.rb.Chia hạt giống thành nhiều phần?

Tôi đã thử:

include 'a' 
include 'b' 

load 'a.rb' 
load 'b.rb' 

trong seeds.rb của tôi, nhưng họ dường như không được xử lý khi tôi gọi là "rake db: hạt giống". Điều này có lẽ là một câu hỏi ruby ​​thẳng hơn là một câu hỏi đường ray nhưng đối với đầy đủ, tôi đang sử dụng Ruby 1.9.2 và Rails 3 trên máy Mac.

Trả lời

20

Trong ./db/seeds/my_module.rb:

module MyModule 
    puts "In my_module.rb" 
    # add code here 
end 

Trong ./db/seeds.rb:

require File.expand_path('../seeds/my_module', __FILE__) # the ../ just removes `seeds.rb` filename from the path which is given by __FILE__ 

p "In seeds.rb" 
# add code here 
+9

Tôi không chắc chắn nếu đặt chúng trong 'db/migrate' là một ý tưởng tuyệt vời; di cư và hạt giống khác nhau và nên được xử lý như vậy. Thay vào đó, một thư mục 'db/seed' có lẽ sẽ tốt hơn. – vonconrad

+3

Có, xin vui lòng không đặt chúng trong 'db/migrate', chúng thuộc về một thư mục riêng biệt như' db/seed'. –

+0

Làm việc như một sự quyến rũ, tất nhiên. Cảm tạ! (Và, tôi đặt chúng vào một thư mục "hạt giống" riêng biệt) – GSP

1

Tôi sẽ đề xuất để tạo ra một db/seeds/ thư mục mới, nơi bạn có thể đặt hạt giống khác nhau tập tin của bạn:

db/seeds/01_stuff_that_comes_for_first.rb 
db/seeds/02_stuff_that_comes_for_second.rb 
... 

Và sau đó chỉnh sửa tệp db/seeds.rb của bạn bằng :

Dir[File.join(Rails.root, 'db', 'seeds', '*.rb')].sort.each { |seed| load seed } 

Vì vậy, bạn có thể tải hạt giống theo thứ tự mình muốn - thường là thứ được yêu cầu.


Giải pháp này ban đầu được đề xuất bởi nathanvda trong số "duplicated" question này.

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