Rails エンジンの rake を使用してサンプル データをデータベースに追加する
-
06-07-2019 - |
質問
ユーザーが広告を表示/投稿/返信できる広告エンジンを作成して、Rails エンジンを試しています。
メイン アプリケーションにはユーザー認証とプロファイル用のコードが含まれており、広告機能を処理するために私が作成したエンジンもあります。
ここで、広告エンジンのデータベースにサンプル データを追加したいと思います。そこで、「vendor/plugins/classifieds/lib/tasks」に「sample_classifieds_data.rake」という rake ファイルを作成し、「vendor/plugins/classifieds/lib/tasks/sample_classifieds_data」に yml ファイルを追加しました。
rake ファイルのコードとサンプル yml ファイルはここにあります。 http://gist.github.com/216776
ここで問題は、rake タスクを実行すると、エラーはスローされませんが、データベースに値が設定されないことです。
何か案は?ところで、これは開発環境であり、データベースは開発データベースです。
同様の rake タスクを実行して、データベースにサンプル ユーザーを追加しました。これは機能しました。その rake ファイル「sample_data.rake」の場所は「lib/tasks」にありました。
解決
あなたのタスクはよく見えます。タスクが黙って失敗する原因となる唯一のものは、Fixture.newに渡すファイルがymlまたはcsvファイルを指していないことです。
putステートメントを変更して、インポートしたファイルの完全なパスを出力し、出力内容をディレクトリ構造と比較して二重チェックします。
たとえば、フィクスチャファイルが大文字で始まる場合、問題なくサイレントに失敗しますか? Categories.ymlの代わりにCategories.yml
他のヒント
rails edgeでは、 rake db:seed
機能を使用して、ベースにデータを追加できます。 コミットを見る。
使い方はとても簡単です。
db / seeds.rb
ファイルを作成します。
そして、データベースにシードするコードをそこに入れます。
例:
Category.create!(:name => 'My Category')
Country.create!(:name => 'Cassoulet Land')
そして、データベースをシードする場合、 rake db:seed
何らかの理由でエッジを使用したくない場合(実稼働環境ではわかりやすい)、 Seed Fu プラグイン。これは非常に便利です。
db:seed タスクは Rails 2.3.4 で追加されました。したがって、エッジを実行する必要はありません。