Ruby on rails 我可以在Rails中的其他设备之前加载一些设备,以便在联接表中循环它们吗?

Ruby on rails 我可以在Rails中的其他设备之前加载一些设备,以便在联接表中循环它们吗?,ruby-on-rails,ruby,minitest,fixtures,Ruby On Rails,Ruby,Minitest,Fixtures,MyRails(4.2.11.1)应用程序具有用户模型和角色模型。在我的fixture中,我有一个users_roles.yml文件,我希望通过循环roles.yml中的所有fixture来填充该文件,并将其分配给特定用户。我正在使用下面的块执行此操作: 用户\u角色.yml <% Role.all.each do |role| %> <%= 'super_test_user' + role.name %>: user_id: <%= ActiveRecord:

MyRails(4.2.11.1)应用程序具有
用户
模型和
角色
模型。在我的fixture中,我有一个users_roles.yml文件,我希望通过循环roles.yml中的所有fixture来填充该文件,并将其分配给特定用户。我正在使用下面的块执行此操作:

用户\u角色.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应用程序(我们称之为“a”)是从另一个Rails应用程序(B)调用的。因此,在应用程序“B”在测试环境中调用测试数据库之前,需要将“A”中的测试夹具加载到测试数据库中。

好的-因此我找到了一个解决方案,虽然有点老套,但它可以工作。如果其他人遇到同样的问题,我会在这里发布:

  • 运行rake数据库:测试:准备
  • 运行
    RAILS\u ENV=test rake db:fixtures:load fixtures=roles
  • 现在运行
    RAILS\u ENV=test rake db:fixtures:load
  • 这样可以确保所有角色都已预加载到正确的db表中,并且可以从联接表夹具文件中的
    角色
    对象中引用


    不过,我更希望在test_helper.rb文件中自动执行此操作。你知道我该怎么做吗?

    好的-我找到了一个解决方案,虽然有点老套,但很有效。如果其他人遇到同样的问题,我会在这里发布:

  • 运行rake数据库:测试:准备
  • 运行
    RAILS\u ENV=test rake db:fixtures:load fixtures=roles
  • 现在运行
    RAILS\u ENV=test rake db:fixtures:load
  • 这样可以确保所有角色都已预加载到正确的db表中,并且可以从联接表夹具文件中的
    角色
    对象中引用

    不过,我更希望在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