Загрузите и используйте приспособление в консоли рельсов - PullRequest
37 голосов
/ 12 августа 2011

Интересно, есть ли способ загрузить и / или использовать крепление в консоли рельсов?На самом деле, я хотел бы создать пользователя из моего прибора users.yml для проведения некоторого тестирования, не выполняя всю «боль» от выполнения User.new(:name = "John", :email = "..") всякий раз.*).

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

Ответы [ 6 ]

42 голосов
/ 26 октября 2011

Вы должны быть в состоянии загрузить свои приборы до входа в консоль. Как это:

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

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

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

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

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

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

31 голосов
/ 22 мая 2013

Может быть поздно ... Рельсы 4

require 'active_record/fixtures'
ActiveRecord::FixtureSet.create_fixtures(Rails.root.join('test', 'fixtures'), 'users')
13 голосов
/ 08 сентября 2013

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

$ rake db:fixtures:load
$ rails c
> require 'active_record/fixtures'
> john = User.find ActiveRecord::FixtureSet.identify('john')
6 голосов
/ 18 августа 2014

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

4 голосов
/ 30 августа 2015

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

require 'active_record/fixtures'

ActiveRecord::Fixtures.create_fixtures FIXTURE_PATH_HERE, MODEL_NAME_HERE
3 голосов
/ 27 августа 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
...