前些日子,写了个关于构建大量数据的rake脚本,但是同事们反映,每次都全部重新构建很老火,能不能有单个表单构建呢?有demand就有市场,今天突然来了性子,
我的基本思路就是想办法获取到seed后面参数,于是按这个思路,网上google一把,寻得一法子
链接
http://stackoverflow.com/questions/14450434/can-i-pass-an-argument-to-rake-dbseed
其主要意思就是,rake脚本不可直接传参数,但是可以通过环境变量的方式来
好吧既然这样我就做了一个小实验,真的成功了,于是把脚本代码改了一下如下
unless ENV["table"].nil?
puts ENV["table"]
ActiveRecord::Fixtures.create_fixtures("#{Rails.root}/db/fixtures", ENV["table"])
else
Dir.foreach("#{Rails.root}/db/fixtures/").each do |file|
if file!= "." and file != ".."
puts file
ActiveRecord::Fixtures.create_fixtures("#{Rails.root}/db/fixtures", file[/[\w]*/])
end
end
end
现在在使用reed命令时,在arguments里加上table=xx(你要创建表单名不加后缀)
rake db:seed table=access_control_policies
建议使用rubymine的IDE,很简化输入命令的长度~~
说完这个 再说下怎么构建大量用例
有时候我们需要很多数据测试,但是不可能在yml文件里面老是粘贴复制吧,还好ActiveRecord的基类里面的Fixtures支持erb脚本 那意思就是说我们阔以在yml文件中像写界面一样写ruby代码。
示范代码如下
<% (1..100).each do |number|%> <%= number%>: unit_id: <%= number%> student_id: "21568" <% end %>
看看是不是很像页面代码,而这段代码短短五行就在数据库里构建了100条数据。
转载于:https://blog.51cto.com/jacksongblack/1201186