레일스 앱에 초기 데이터를 채우는 레이크 작업이 있습니다. 예 : 국가, 주, 이동 통신사 등
지금 설정 한 방법은 / db / fixtures의 파일에 많은 create 문과이를 처리하는 레이크 작업이 있다는 것입니다. 예를 들어, 제가 가지고있는 한 가지 모델은 테마입니다. 다음과 같은 / db / fixtures에 theme.rb 파일이 있습니다.
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"
여기서 아이디어는 사용자가 시작할 수 있도록 몇 가지 스톡 테마를 설치하려는 것입니다. 이 방법에 문제가 있습니다.
ID 설정이 작동하지 않습니다. 즉, 테마를 추가하기로 결정한 경우 'Red'라고 부르겠습니다. 그러면이 조명기 파일에 테마 문을 추가하고 rake 작업을 호출하여 데이터베이스를 다시 시드하기 만하면됩니다. 그렇게하면 테마가 다른 개체에 속하고 다시 초기화 할 때 해당 ID가 변경되므로 모든 링크가 끊어집니다.
내 질문은 우선 데이터베이스 시드를 처리하는 좋은 방법입니까? 이전 게시물에서 이것은 나에게 권장되었습니다.
그렇다면 ID를 어떻게 하드 코딩 할 수 있습니까? 그에 대한 단점이 있습니까?
그렇지 않은 경우 데이터베이스를 시드하는 가장 좋은 방법은 무엇입니까?
모범 사례를 포함하는 오랜 답변에 대해 진심으로 감사드립니다.