前些日子,写了个关于构建大量数据的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脚本 t_0002.gif那意思就是说我们阔以在yml文件中像写界面一样写ruby代码。

示范代码如下

<% (1..100).each do |number|%>
<%= number%>:
 unit_id: <%= number%>
 student_id: "21568"
<% end %>

看看是不是很像页面代码,而这段代码短短五行就在数据库里构建了100条数据。