Tôi có một nhiệm vụ rake điền một số dữ liệu ban đầu trong ứng dụng rails của tôi. Ví dụ: quốc gia, tiểu bang, nhà cung cấp dịch vụ di động, v.v.
Theo cách tôi thiết lập nó bây giờ, là tôi có một loạt các câu lệnh tạo trong các tệp trong / db / fixtures và một tác vụ rake xử lý chúng. Ví dụ, một mô hình tôi có là chủ đề. Tôi có một tệp theme.rb trong / db / fixtures trông giống như sau:
Theme.delete_all
Theme.create(:id => 1, :name=>'Lite', :background_color=>'0xC7FFD5', :title_text_color=>'0x222222',
:component_theme_color=>'0x001277', :carrier_select_color=>'0x7683FF', :label_text_color=>'0x000000',
:join_upper_gradient=>'0x6FAEFF', :join_lower_gradient=>'0x000000', :join_text_color=>'0xFFFFFF',
:cancel_link_color=>'0x001277', :border_color=>'0x888888', :carrier_text_color=>'0x000000', :public => true)
Theme.create(:id => 2, :name=>'Metallic', :background_color=>'0x000000', :title_text_color=>'0x7299FF',
:component_theme_color=>'0xDBF2FF', :carrier_select_color=>'0x000000', :label_text_color=>'0xDBF2FF',
:join_upper_gradient=>'0x2B25FF', :join_lower_gradient=>'0xBEFFAC', :join_text_color=>'0x000000',
:cancel_link_color=>'0xFF7C12', :border_color=>'0x000000', :carrier_text_color=>'0x000000', :public => true)
Theme.create(:id => 3, :name=>'Blues', :background_color=>'0x0060EC', :title_text_color=>'0x000374',
:component_theme_color=>'0x000374', :carrier_select_color=>'0x4357FF', :label_text_color=>'0x000000',
:join_upper_gradient=>'0x4357FF', :join_lower_gradient=>'0xffffff', :join_text_color=>'0x000000',
:cancel_link_color=>'0xffffff', :border_color=>'0x666666', :carrier_text_color=>'0x000000', :public => true)
puts "Success: Theme data loaded"
Ý tưởng ở đây là tôi muốn cài đặt một số chủ đề cổ phiếu cho người dùng bắt đầu. Tôi có một vấn đề với phương pháp này.
Đặt ID không hoạt động. Điều này có nghĩa là nếu tôi quyết định thêm một chủ đề, hãy gọi nó là 'Red', sau đó tôi chỉ muốn thêm câu lệnh chủ đề vào tệp cố định này và gọi tác vụ rake để gửi lại cơ sở dữ liệu. Nếu tôi làm điều đó, bởi vì các chủ đề thuộc về các đối tượng khác và id của chúng thay đổi khi khởi tạo lại này, tất cả các liên kết đều bị hỏng.
Câu hỏi của tôi trước hết là, đây có phải là một cách tốt để xử lý việc seeding một cơ sở dữ liệu không? Trong một bài viết trước, điều này đã được đề xuất cho tôi.
Nếu vậy, làm cách nào để tôi có thể mã hóa cứng các ID, và có bất kỳ nhược điểm nào của điều đó không?
Nếu không, cách tốt nhất để bắt đầu cơ sở dữ liệu là gì?
Tôi sẽ thực sự đánh giá cao các câu trả lời dài và được suy nghĩ kết hợp các phương pháp hay nhất.