Làm cách nào để sử dụng tệp YAML thay vì seed.rb để tải dữ liệu ban đầu vào cơ sở dữ liệu?Ruby on Rails: tải dữ liệu hạt giống từ tập tin YAML
Trả lời
Check-out Ruby on Rails Hướng dẫn đồ đạc:
http://guides.rubyonrails.org/testing.html#the-low-down-on-fixtures
Nói chung, bạn có thể tạo các file cố YAML trong thư mục test/
và sau đó tải chúng vào cơ sở dữ liệu của bạn bằng cách sử dụng lệnh rake db:fixtures:load
. Các tài liệu đầy đủ về tất cả những điều tuyệt vời bạn có thể làm với trang thiết bị như ở đây:
Điều tương tự có hoạt động cho phát triển hoặc sản xuất không? – fijiaaron
Liên kết cuối cùng bị hỏng. Ngoài ra, tải dữ liệu hạt giống từ 'test /' dường như không đúng cách để làm việc. – Zaz
Nó cũng khiến tôi cảm thấy không thoải mái, nhưng trong thực tế một số người sử dụng đồ đạc để điền dữ liệu cho mục đích thử nghiệm. Có các tập tin giống yaml giống nhau ở hai nơi cảm thấy thậm chí còn nhiều hơn ... icky. – jaydel
Thêm mã trong db/seeds.rb
để phân tích các file YAML, ví dụ:
seed_file = Rails.root.join('db', 'seeds', 'categories.yml')
config = YAML::load_file(seed_file)
Category.create!(config)
Sau đó, chỉ cần đặt YAML fie in db/seeds/categories.yml
. Các file YAML phải là một danh sách các mảng kết hợp, ví dụ .:
- name: accessory
shortcode: A
- name: laptop
shortcode: L
- name: server
shortcode: S
Vấn đề với giải pháp này là nếu bạn chạy 'rake db: seed' một giây thời gian, bạn sẽ nhận được một loạt các bản sao. Tùy thuộc vào yêu cầu về tính duy nhất, có thể bạn sẽ muốn sửa đổi dòng cuối cùng thành một cái gì đó như: 'config.each {| values | Category.first_or_create (values)} ' – sberkley
Trong trường hợp nào bạn muốn nhân cơ sở dữ liệu hai lần? 'rake db: reset' làm mọi thứ bạn cần 99% thời gian. – Zaz
Nếu bạn thêm các giá trị giống mới vào bảng hoặc thêm một bảng mới với các giá trị được chọn. Việc bỏ toàn bộ cơ sở dữ liệu có thể là một giải pháp trong môi trường phát triển, nhưng chắc chắn không phải là trong sản xuất. Thả bảng giống trước khi tái gieo giống cũng không phải là một tùy chọn nếu có bất kỳ tham chiếu nào đến các id của bảng đó trong một bảng khác. Nếu bạn cần phải loại bỏ các giá trị hạt giống trước đó, tình huống trở nên phức tạp hơn và có thể yêu cầu một giải pháp vượt quá 'rake db: seed'. – sberkley
tôi đã sử dụng câu trả lời @Zaz trả lời. Nó hoạt động rất tốt.
Nhưng trong khi đó nếu có sự cố với dữ liệu hạt giống của bạn (Ví dụ: bạn có tệp yaml hạt giống rất lớn), bạn muốn biết phần nào của yaml của bạn đã sai. Vào thời điểm đó bạn có thể thêm một khối sau khi tạo! để gỡ lỗi như thế này:
seed_file = Rails.root.join('db', 'seeds', 'categories.yml')
config = YAML::load_file(seed_file)
counter = 0
Category.create!(config) do |c|
puts "Create category #{counter += 1} with name: #{c.name}"
end
- 1. Cơ sở dữ liệu đối tượng cho Ruby on Rails
- 2. Tài liệu Ruby on Rails
- 3. db: hạt giống không tải mô hình
- 4. Ruby On Rails: cách tạo các tệp hạt giống khác nhau cho các môi trường
- 5. Tải tệp lên trong Ruby on Rails
- 6. Ruby on Rails CoffeeScript không
- 7. Tải Ảnh lên Ruby on Rails
- 8. Ruby on Rails Tải lên tệp AJAX
- 9. Ruby YAML :: tải
- 10. Chạy rake db: hạt giống không tải từ hạt giống.rb
- 11. Ruby on rails: Tải lên từ xa Tệp tin bằng AJAX
- 12. Ruby on Rails - Khung Faye - private_pub
- 13. Dữ liệu không vào cơ sở dữ liệu SQLite - Ruby on Rails
- 14. Lỗi Rake Ruby on Rails
- 15. Ruby on Rails 301
- 16. Làm thế nào để giải nén một tập tin trong Ruby on Rails?
- 17. Dải html từ chuỗi Ruby on Rails
- 18. Ruby vs Ruby On Rails
- 19. Lưu trữ dữ liệu trong Ruby on Rails mà không có cơ sở dữ liệu
- 20. Ruby On Rails: Tạo kiểu xem và điều khiển từ cơ sở dữ liệu hiện có
- 21. của Ruby tải cấu hình (yaml) tập tin trong cùng một thư mục như là nguồn
- 22. Làm thế nào để tải db: dữ liệu hạt giống vào cơ sở dữ liệu thử nghiệm tự động?
- 23. Ruby on Rails: unloadable
- 24. Ruby on rails application root
- 25. Ruby on Rails i18n - Muốn dịch các tin nhắn tùy chỉnh trong các mẫu
- 26. Hàng đợi tin nhắn trong Ruby on Rails
- 27. Lưu trữ tài liệu bằng Ruby On Rails
- 28. Ruby on rails và Node.js
- 29. Ruby on Rails so với Python
- 30. Xử lý Kẹp giấy thư mục và tập tin cho phép sử dụng Ruby on Rails
Thấy câu trả lời được chấp nhận không tốt (đặt dữ liệu hạt giống trong thư mục 'test /') và [câu trả lời của tôi] (http://stackoverflow.com/a/24957205/405550) đã có nhiều upvotes đáng kể hơn, bạn có vui lòng xem xét chấp nhận của tôi không? – Zaz