Загрузить и использовать фикстуру в консоли rails

Интересно, есть ли способ загрузить и/или использовать приспособление в консоли рельсов. На самом деле, я хотел бы создать пользователя из моего устройства users.yml для проведения некоторого тестирования без необходимости каждый раз проходить через всю "боль" выполнения User.new(:name = "John", :email = "..").
Сейчас я нахожусь в тестовой среде (rails c RAILS_ENV=test).

Если это нехороший способ сделать что-то, пожалуйста, скажите об этом. Я новичок в Rails, поэтому я здесь, чтобы учиться :)


person Patrick Pruneau    schedule 12.08.2011    source источник


Ответы (6)


Вы должны иметь возможность загрузить свои приборы до входа в консоль. Так:

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

Однако вы по-прежнему не сможете получить доступ к своим данным прибора, как в тесте. Это просто загружает вашу тестовую базу данных с данными ваших приборов. Так что вам все равно придется сделать что-то вроде:

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

Но вы все равно можете создавать ярлыки для такого рода вещей. Вы можете добавить любой ruby-код в файл ~/.irbrc. Я предлагаю создать файл .railsrc, как описано здесь. Затем вы можете настроить такие вещи, как:

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

Так что теперь вы можете просто начать ссылаться на переменную 'john' после загрузки консоли. Между прочим, сообщение, на которое я ссылаюсь, показывает, как настроить глобальный файл .railsrc, но вы можете настроить его так, чтобы у вас был файл .railsrc для каждого проекта. Или, если вы хотите что-то менее причудливое, но простое... просто создайте файл ruby ​​в своем проекте (например, 'shortcuts.rb'). После того, как консоль загружена, просто сделайте «ярлыки».

person Ryan Sandridge    schedule 26.10.2011
comment
Спасибо за этот ответ, однако (по крайней мере, в Rails 3.2.5) команда такова: rails c test - person Tiemen; 12.07.2012
comment
Начиная с Rails 6.0, rails c test не работает. Сделайте вместо этого RAILS_ENV=test rails c - person Masa Sakano; 16.10.2020
comment
@MasaSakano LOL ... вернемся к моему первоначальному ответу ???? - person Ryan Sandridge; 15.11.2020

Может быть поздно... Rails 4

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

Вы также можете загружать фикстуры в базу данных разработки:

$ rake db:fixtures:load
$ rails c
> require 'active_record/fixtures'
> john = User.find ActiveRecord::FixtureSet.identify('john')
person Wojtek Kruszewski    schedule 08.09.2013

Так что у меня была похожая, но немного другая потребность. Я хотел использовать свои существующие фикстуры (из моего теста 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-фикстур.

person hercules08    schedule 18.08.2014

Вы можете загрузить фикстуру в консоль Rails 3.2 следующим образом:

require 'active_record/fixtures'

ActiveRecord::Fixtures.create_fixtures FIXTURE_PATH_HERE, MODEL_NAME_HERE
person jpw    schedule 29.08.2015

Альтернативный каталог приборов можно указать с помощью переменной 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
person Fred Willmore    schedule 26.08.2015
comment
хм... у меня это не сработало, но это работает: rake db:fixtures:load RAILS_ENV=test FIXTURES_PATH='spec/fixtures' FIXTURES=users,participants - person Rob; 17.09.2015
comment
Это самый современный способ сделать это в Rails 6. FIXTURES_DIR можно использовать для указания подкаталога test/fixtures. FIXTURES_PATH может использоваться для указания любого пути. - person James H; 16.07.2021