相关疑难解决方法(0)

如何自动将db:seed数据加载到测试数据库中?

我正在尝试使用Rails 2.3.4+(db:seedrake任务)中加载种子数据的新标准方法.

我正在加载常量数据,这是我的应用程序真正正常运行所必需的.

db:seed在测试之前让任务运行的最佳方法是什么,所以数据是预先填充的?

testing ruby-on-rails seed

117
推荐指数
4
解决办法
6万
查看次数

在Rails中为数据库设定种子的最佳方法是什么?

我有一个rake任务,在我的rails应用程序中填充一些初始数据.例如,国家,州,移动运营商等

我现在设置它的方式是,我在/ db/fixtures中的文件中有一堆create语句,还有一个处理它们的rake任务.例如,我有一个模型是主题.我在/ db/fixtures中有一个theme.rb文件,如下所示:

Theme.delete_all
Theme.create(:id => 1, :name=>'Lite', :background_color=>'0xC7FFD5', :title_text_color=>'0x222222',
                      :component_theme_color=>'0x001277', :carrier_select_color=>'0x7683FF', :label_text_color=>'0x000000',
                      :join_upper_gradient=>'0x6FAEFF', :join_lower_gradient=>'0x000000', :join_text_color=>'0xFFFFFF',
                      :cancel_link_color=>'0x001277', :border_color=>'0x888888', :carrier_text_color=>'0x000000', :public => true)

Theme.create(:id => 2, :name=>'Metallic', :background_color=>'0x000000', :title_text_color=>'0x7299FF',
                      :component_theme_color=>'0xDBF2FF', :carrier_select_color=>'0x000000', :label_text_color=>'0xDBF2FF',
                      :join_upper_gradient=>'0x2B25FF', :join_lower_gradient=>'0xBEFFAC', :join_text_color=>'0x000000',
                      :cancel_link_color=>'0xFF7C12', :border_color=>'0x000000', :carrier_text_color=>'0x000000', :public => true)

Theme.create(:id => 3, :name=>'Blues', :background_color=>'0x0060EC', :title_text_color=>'0x000374',
                      :component_theme_color=>'0x000374', :carrier_select_color=>'0x4357FF', :label_text_color=>'0x000000',
                      :join_upper_gradient=>'0x4357FF', :join_lower_gradient=>'0xffffff', :join_text_color=>'0x000000',
                      :cancel_link_color=>'0xffffff', :border_color=>'0x666666', :carrier_text_color=>'0x000000', :public => true)
puts "Success: Theme data loaded"
Run Code Online (Sandbox Code Playgroud)

这里的想法是我想为用户安装一些股票主题.我有这个方法的问题.

设置ID不起作用.这意味着如果我决定添加一个主题,让我们称之为"红色",那么我只想将主题语句添加到此fixture文件并调用rake任务来重新设置数据库.如果我这样做,因为主题属于其他对象,并且在重新初始化时它们的id发生了变化,所有链接都会被破坏.

我的问题首先是,这是处理数据库播种的好方法吗?在上一篇文章中,我向你推荐了这个.

如果是这样,我怎么能对ID进行硬编码,这有什么缺点吗?

如果没有,那么种子数据库的最佳方法是什么?

我将真正感谢包含最佳实践的长期和深思熟虑的答案.

ruby database ruby-on-rails seed task

78
推荐指数
4
解决办法
11万
查看次数

阻止Rails测试删除种子数据

我使用seeds.rb来填充一些状态模型参考数据:

State.create :name => 'Alabama', :abbreviation => 'AL'
State.create :name => 'Alaska', :abbreviation => 'AK'
# ...
Run Code Online (Sandbox Code Playgroud)

虽然我没有使用状态装置(因为它的种子数据一开始,我认为仅仅为了测试而不必复制它),Rails测试框架似乎在测试期间删除了所有状态种子数据.(我正在删除,重新创建,迁移和重新安装测试数据库,并在单元测试运行之前确认数据存在.)

结果是这个断言在seeds.rb中成功但在单行测试中失败:

assert_equal 51, State.all.size

1) Failure:
test_state_seeds_are_present(StateTest) [/test/unit/state_test.rb:24]:
<51> expected but was
<0>.
1 tests, 1 assertions, 1 failures, 0 errors
Run Code Online (Sandbox Code Playgroud)

我已经尝试在基本测试类fixtures语句中明确列出非状态模型,以及翻转事务fixtures标志(正如预期的那样,这只会影响测试期间创建的记录).当然,正在考虑的测试本身并不删除这些记录.

始终删除州记录.有没有办法告诉Rails只是脱掉种子数据?我是否需要复制灯具中的所有数据以确保它重新加载?如果没有重大政治事件,我预计州数据将相对稳定.

TIA

ruby testing ruby-on-rails seed fixtures

13
推荐指数
1
解决办法
6634
查看次数

标签 统计

ruby-on-rails ×3

seed ×3

ruby ×2

testing ×2

database ×1

fixtures ×1

task ×1