web-dev-qa-db-ja.com

Railsコンソールでフィクスチャをロードして使用する

Rails consoleでフィクスチャをロードおよび/または使用する方法があるかどうか疑問に思います。実際、フィクスチャからユーザーを作成して_users.yml_せずにテストを行いたいと思います毎回User.new(:name = "John", :email = "..")を行うことのすべての「苦痛」を経験すること。
現在テスト環境にいます(_Rails c Rails_ENV=test_)。

それが物事を行うには良い方法ではない場合は、それを言ってください。私はRailsを初めて使用するので、ここに学びます:)

38
Patrick Pruneau

コンソールに入る前にフィクスチャをロードできるはずです。このような:

bin/Rails db:fixtures:load Rails_ENV=test
Rails console test

ただし、テストとは異なり、フィクスチャデータにアクセスすることはできません。これは、テストデータベースにフィクスチャデータをロードするだけです。だからあなたはまだ次のようなことをする必要があります:

user = User.find_by(name: "John")

ただし、この種のショートカットを作成することはできます。 〜/ .irbrcにRuby必要なコードを追加できます。説明されているように.railsrcファイルを作成することをお勧めします ここ 。その後、設定を行うことができますお気に入り:

john = User.find_by(name: "John")

したがって、コンソールのロード後に変数「john」を参照し始めることができます。ちなみに、私がリンクした投稿は、グローバル.railsrcファイルの設定方法を示していますが、プロジェクトごとの.railsrcが存在するように設定することもできます。または、少し派手ではないが簡単に実行したい場合は、プロジェクトにRubyファイル(多分 'shortcuts.rb')を作成します。コンソールがロードされた後、 「ショートカット」が必要です。

42
Ryan Sandridge

遅れる可能性があります... Rails 4

require 'active_record/fixtures'
ActiveRecord::FixtureSet.create_fixtures(Rails.root.join('test', 'fixtures'), 'users')
33
woto

フィクスチャを開発データベースにロードすることもできます:

$ rake db:fixtures:load
$ Rails c
> require 'active_record/fixtures'
> john = User.find ActiveRecord::FixtureSet.identify('john')
14

だから私は似ていますが少し異なるニーズがありました。私の既存のフィクスチャー(rspecテストからのもの)を使用して、開発データベースにデータを追加したいと思っていました。これは、rakeファイル(libs/tasks/*。rakeにあります)に新しいタスクを追加することで実現しました。

task d_populate: :environment do
  require 'active_record/fixtures'
  fixtures_dir = File.join(Rails.root, '/spec/fixtures') #change '/spec/fixtures' to match your fixtures location
  Dir.glob(File.join(fixtures_dir,'*.yml')).each do |file|
  base_name = File.basename(file, '.*')
  puts "Loading #{base_name}..."
  ActiveRecord::Fixtures.create_fixtures(fixtures_dir, base_name)
  end
end

これをdb:resetと組み合わせると、これをrakeタスクに追加することで、開発環境に自由にデータを追加できます。

task reseed: [:environment, 'db:reset', 'db:d_populate']

次に、rake db:reseedを呼び出して、フィクスチャーYAMLファイルからデータを取り込むことができます。

6
hercules08

次のようにRails 3.2コンソールでフィクスチャをロードできます:

require 'active_record/fixtures'

ActiveRecord::Fixtures.create_fixtures FIXTURE_PATH_HERE, MODEL_NAME_HERE
4
jpw

FIXTURES_DIR変数を使用して、代替のフィクスチャディレクトリを指定することが可能です。値はテスト/フィクスチャに関連している必要があります。

$ rake db:fixtures:load Rails_ENV=test FIXTURES_DIR='../../spec/fixtures'

限定された器具セットを指定することも可能です

$ rake db:fixtures:load Rails_ENV=test FIXTURES_DIR='../../spec/fixtures' FIXTURES=users,user_roles
3
Fred Willmore