Load and use fixture in rails console

前端 未结 6 1809
南方客
南方客 2021-01-31 08:07

I wonder if there\'s a way to load and/or use fixture in rails console. Actually, I\'d like to create a user from my fixture users.yml to do some testing without ha

相关标签:
6条回答
  • 2021-01-31 08:41

    You should be able to load your fixtures prior to entering console. Like this:

    RAILS_ENV=test bin/rails db:fixtures:load
    RAILS_ENV=test bin/rails console
    

    However, you still won't be able to access your fixture data like you would in a test. This simply loads your test database with your fixtures data. So you'd still have to do something like:

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

    But, you can still create shortcuts for this sort of thing. You can add any ruby code you'd like to your ~/.irbrc. I suggest creating a .railsrc file as described here. You can then set up things like:

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

    So now you can just start referring to the variable 'john' after console loads. Incidentally, the post I linked to shows how to set up a global .railsrc file, but you could set it up so that you had a per project .railsrc. Or, if you want something a little less fancy, but easy to do... just create a ruby file in your project (maybe 'shortcuts.rb'). After console is loaded, just do a require 'shortcuts'.

    0 讨论(0)
  • 2021-01-31 08:43

    You can load fixtures into your development database too:

    $ rake db:fixtures:load
    $ rails c
    > require 'active_record/fixtures'
    > john = User.find ActiveRecord::FixtureSet.identify('john')
    
    0 讨论(0)
  • 2021-01-31 08:44

    So I had a similar but slightly different need. I wanted to use my existing fixtures (from my rspec test) to populate my development database. This is how I did it by adding a new task to my rake file (located in 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
    

    If you combine this with a db:reset you can populate your development environment at will by adding this to your rake task as well:

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

    Then you can call rake db:reseed to populate from fixture YAML files.

    0 讨论(0)
  • 2021-01-31 09:00

    May be late... Rails 4

    require 'active_record/fixtures'
    ActiveRecord::FixtureSet.create_fixtures(Rails.root.join('test', 'fixtures'), 'users')
    
    0 讨论(0)
  • 2021-01-31 09:00

    It's possible to specify an alternate fixture directory using the FIXTURES_DIR variable. The value should be relative to test/fixtures.

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

    It's also possible to specify a limited set of fixtures

    $ rake db:fixtures:load RAILS_ENV=test FIXTURES_DIR='../../spec/fixtures' FIXTURES=users,user_roles
    
    0 讨论(0)
  • 2021-01-31 09:02

    You can load a fixture in the Rails 3.2 console as follows:

    require 'active_record/fixtures'
    
    ActiveRecord::Fixtures.create_fixtures FIXTURE_PATH_HERE, MODEL_NAME_HERE
    
    0 讨论(0)
提交回复
热议问题