2

これを理解するには、具体的に説明する必要があります。私のアプリケーションには、ウィジェットの色のテーマ情報を含む theme というモデルがあります。いくつかのテーマを提供していますが、主にユーザーが独自のテーマを作成することに依存しています。問題は、テーマをどこに保存すればよいかということです。それらをテーマデータベースに保存すると、テスト中にデータベースを切り替えたりフラッシュしたりするたびに、テーマを再入力する必要があります。これは大したことではありません。

現在、コントローラーのハッシュにテーマを保存しています。これに関する問題は、各ウィジェットにはテーマがあり、各ウィジェットには theme_id があり、提供されたテーマはデータベースに保存されていないため、theme_id がないためです。

この問題の解決策は非常に簡単であることはわかっていますが、自分の解決策が最適なコーディング プラクティスを採用していることを確認したいと考えています。これについて何か提案はありますか?移行またはその他の rake タスク中にデータベースにエントリを追加する方法があるかもしれません...

ありがとうございました!

トニー

4

3 に答える 3

4

移行でシード データをロードすることは最も理にかなっていて、私が頻繁に行ってきたことです。これらの最初のいくつかのレコードを作成することが本当にテーブルの適切な初期化の一部である場合、つまり、テーブルがそれらなしではアプリケーションで必要なジョブを実行できない場合、それらは移行に属します。Rake タスクは、コマンドでアプリケーションにロードする必要があるデータ セットをキャプチャするのに最適ですが (たとえば、デモ用)、特定のレコードが常に必要になる場合は、移行が最適です。

于 2009-01-30T07:59:48.740 に答える
3

テーマデータはデータベースに属しています。

テストでは、フィクスチャまたはsetupメソッドを使用してテーマデータを初期化します。開発と制作では、データベースに初期テーマデータをシードする方法を作成する必要があります。これには、カスタムのRakeタスクが適しています。実際のテーマデータは、実際には任意の形式で保存できます。たとえば、SQLスクリプトやYMLフィクスチャ

次のRakeタスクを使用して、db / seeddata内のSQLファイルに保持されているデータをデータベースにシードします(これをプロジェクトの/ libディレクトリの下の.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
于 2009-01-28T21:09:15.393 に答える
1

データをシードするというあなたのアイデアは、進むべき道のようです。私はあなたが提案した方法が好きですが、ここで提案された方法についてどう思いますか: http://railspikes.com/2008/2/1/loading-seed-data

データを検証できるように、ActiveRecord にデータのシードを処理させることをお勧めします。

どちらが良いと思いますか?

再度、感謝します!

トニー

于 2009-01-28T21:41:55.263 に答える