Ruby on rails 什么';这是在rails中创建域表(查找表)的首选方法
我正在读Dan Chak的Enterprise Rails书-好书。在书中,他讨论了域表或查找表,并建议通过向模式定义中添加insert语句来创建这些表,因为这些表不太可能更改。这本书是在seeds.rb文件出现之前编写的,因此我的问题如下:Ruby on rails 什么';这是在rails中创建域表(查找表)的首选方法,ruby-on-rails,ruby-on-rails-3,Ruby On Rails,Ruby On Rails 3,我正在读Dan Chak的Enterprise Rails书-好书。在书中,他讨论了域表或查找表,并建议通过向模式定义中添加insert语句来创建这些表,因为这些表不太可能更改。这本书是在seeds.rb文件出现之前编写的,因此我的问题如下: 考虑到seeds文件的存在,使用seeds文件来创建域表是更可取的还是仍然更可取的做法是对架构定义使用insert语句 如果inserts语句仍然可取,那么只需键入insert语句,然后运行db:rake migrate即可 我也有同样的问题,我发现这一页
我也有同样的问题,我发现这一页是在寻找其他人是如何解决这个问题的
我不认为这是最好的解决方案,但我最终使用find_或create_by…,将域数据放入模型中。。。,因为我不知道如何在测试期间模型稳定之前获取填充的种子数据。使用
find\u或将域数据放入模型会在测试期间给我带来一些问题。我认为问题在于,数据是在测试的db事务中插入的,常量是在测试的db事务中定义的。在测试示例之后,db事务被回滚,使仍然实例化的常量指向不再存在的记录
因此,我将域数据放入seeds.rb
。为了防止Docuunet注意到的在数据进入数据库之前实例化模型的问题,我使用原始SQL进行插入,如下所示:
# in db/seeds.rb
ActiveRecord::Base.connection.execute "INSERT INTO invoice_statuses(name) values ('Approved'), ('Sent'), ('Paid');"
我将数据库配置为在测试之间清理数据库时跳过所有域表:
# 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
以下是我们所指的概念: