私のモデルの一つは、私は自動移入されるべきいくつかのインスタンスを持っています。私はこれをどのように扱うのですか?
-
20-08-2019 - |
質問
私が理解するために、このための具体的でなければなりません。私のアプリケーションでは、私は、ウィジェットのカラーテーマの情報が含まれているモデルと呼ばれるテーマを持っています。我々はいくつかのテーマを提供していますが、主に独自のテーマを作成するために、ユーザーに依存しています。そこで質問です:私は私のテーマを保存しますどこ?私は、テーマデータベースに格納した場合は、いつでも私は、データベースを切り替えたり、テスト中にそれをフラッシュし、私はテーマを再入力する必要があります。これは大きな問題ではない、それだけでずさんなようです。
今私は、コントローラ内のハッシュに保存されているテーマを持っています。各ウィジェットは、テーマを持って、各ウィジェットはtheme_idを持ち、それらがデータベースに格納されていないので、私たちの提供するテーマにはtheme_idがないのでそれに問題がある。
私は、この問題に対する解決策は非常に単純であることを知っているが、私は私の解決策がベストコーディング手法を採用して確認します。誰もがこのために何か提案がありますか?たぶん移行や他のrakeタスク中にデータベースにエントリを追加する方法があります...
ありがとうございます!
トニー
解決
の移行で読み込ん種データは、最も理にかなっていると私は頻繁に行っているものです。あなたのテーブルは、単に何もそれらなしで、あなたのアプリケーションに必要な仕事をする場合は、それらの最初の数レコードを作成すること、すなわち、本当にあなたのテーブルの適切な初期化の一部でない場合、それらは、移行に属しています。レーキタスクは(デモ用など)コマンドでアプリケーションにロードするために必要なデータセットを取得するための素晴らしいですが、特定のレコードが一貫必要とされることが予定されている場合、移行がスポットです。
他のヒント
テーマデータはデータベースに属します。
は、テストのために、固定具又はsetup
法を用いてテーマデータを初期化します。開発と生産のために、あなたは最初のテーマデータでデータベースをシードする方法を作成する必要があります。カスタムrakeタスクは、このために良いです。実際のテーマデータは本当に、あなたが望む任意のフォーマットで保存することができます。例えばSQLスクリプトまたは YML器具の
私はデシベル/ seeddata内のSQLファイルに保持されているデータ(プロジェクトの/ libディレクトリの下に.rakeファイルでこれを置く)でデータベースをシードするために、次のrakeタスクを使用します:
namespace :db do
desc "Load seed fixtures (from db/seeddata) into the current environment's database."
task :seed => :environment do
require 'yaml'
config = YAML::load(open("#{RAILS_ROOT}/config/database.yml"))["#{RAILS_ENV}"]
Dir.glob(RAILS_ROOT + '/db/seeddata/*.sql').each do |file|
cmd = "mysql -u #{config['username']} -p#{config['password']} -h #{config['host']} #{config['database']} < #{file}"
`#{cmd}`
end
end
end
データをシードするあなたのアイデアが進むべき道のように思えます。私はあなたが提案した方法を好きですが、あなたはここで提案する方法をどう思いますか: http://railspikes.com/2008/2/1/loading-seed-データの
それはあなたがActiveRecordのは、それがデータを検証できるようにデータを播種処理させることを示唆しています。
あなたが優れていると思いますどちら?
おかげで再び!
トニー