我正在阅读Dan Chak的Enterprise Rails Book - Great Book。 在本书中,他讨论了域表或查找表,并建议通过向模式定义添加insert语句来创建这些表 - 因为表不太可能更改。 这本书是在seeds.rb文件出现之前编写的,所以我的问题如下:

  1. 鉴于种子文件的存在,使用种子文件创建域表是优选/更好的还是最好使用插入语句来进行模式定义。

  2. 如果仍然更喜欢insert语句,那么只需输入insert语句然后运行db:rake migrate即可。

===============>>#1 票数:1 已采纳

我有同样的问题,发现这个页面正在寻找其他人如何解决它。

我不认为它是最好的解决方案,但我最终使用find_or_create_by ...将域数据放入模型中,因为我无法弄清楚如何在测试期间模型实例化之前填充种子数据。

===============>>#2 票数:0

使用find_or_create_by将域数据放入模型中会在测试期间给我带来一些问题。 我认为问题是在测试的db事务期间插入了数据并且常量定义了全部。 在测试示例之后,db事务将回滚,使仍然实例化的常量指向不再存在的记录。

所以我将域数据放入seeds.rb 为了防止Docunext注意到的问题,在数据在db之前实例化的模型,我使用原始SQL作为插入,如下:

   # in db/seeds.rb
   ActiveRecord::Base.connection.execute "INSERT INTO invoice_statuses(name) values ('Approved'), ('Sent'), ('Paid');"

我将database_cleaner gem配置为在两次测试之间清理数据库时跳过所有域表:

    # in spec/support/database_cleaner.rb
    RSpec.configure do |config|

      domain_data = %w[aql_results invoice_statuses service_results remark_types]

      config.before(:suite) do
        DatabaseCleaner.strategy = :deletion, { except: domain_data }
        DatabaseCleaner.clean
      end

      config.before(:each) do
        DatabaseCleaner.strategy = :transaction
      end

      config.before(:each, :js => true) do
        DatabaseCleaner.strategy = :deletion, { except: domain_data }
      end

      config.before(:each) do
        DatabaseCleaner.start
      end

      config.after(:each) do
        DatabaseCleaner.clean
      end

    end

  ask by Mutuelinvestor translate from so

未解决问题?本站智能推荐:

关注微信公众号