Приложение My Rails (4.2.11.1) имеет модель User
и модель Role
. В моих приборах у меня есть файл users_roles.yml , который я хотел бы заполнить, просматривая все приборы в role.yml и назначая их определенному пользователю. Я делаю это с помощью блока ниже:
users_roles.yml
<% Role.all.each do |role| %>
<%= 'super_test_user' + role.name %>:
user_id: <%= ActiveRecord::FixtureSet.identify(:super_test_user) %>
role_id: <%= ActiveRecord::FixtureSet.identify(role.name.to_sym) %>
<% end %>
Моя проблема в том, что когда я запускаю RAILS_ENV=test rake db:fixtures:load
, Rails достигает * 1015Сначала файл * users_roles.yml , поэтому в объекте Role
нет ничего, что могло бы пройти через него. У меня есть сотни ролей, поэтому я хочу по возможности избегать этого вручную.
Есть ли способ заставить Rails загружать role.yml светильники до * 1022? * user_roles.yml файл, когда я звоню RAILS_ENV=test rake db:fixtures:load
? Я попробовал ответ на Загрузка устройств Rails в определенном порядке при тестировании , но, к сожалению, не могу заставить это работать. Я изменил этот ответ следующим образом в моем test_helper.rb файле:
test_helper.rb
class ActiveRecord::FixtureSet
class << self
alias :orig_create_fixtures :create_fixtures
end
def self.create_fixtures f_dir, fs_names, *args
Role.delete_all
User.delete_all
reset_cache
fs_names = %w(role user) & fs_names | fs_names
orig_create_fixtures f_dir, fs_names, *args
end
end
Я сделалчто-то не так в вышесказанном? Или есть другой способ, которым я мог бы добиться этого?
РЕДАКТИРОВАТЬ: я должен также добавить причину, по которой я загружаю приборы таким образом, потому что это приложение Rails (давайте назовем его 'A') вызывается из другогоПриложение Rails (B). Таким образом, тестовые приборы в «A» должны быть загружены в тестовую базу данных, прежде чем приложение «B» вызовет их в тестовой среде.