是否可以在我的seeds.rb代码中运行一个或两个块,就像测试和gemfiles一样?
例如,如果我在seeds.rb文件中有以下代码,我可以只为Employee
模型播种吗?
20.times do
Employee.create!(name: "Bob",
email: Faker::Internet.email)
end
20.times do
User.create!(name: "Hank",
password: "foobar")
end
如果这是我的整个seeds.rb文件,当我只想添加更多员工时,运行rake db:seed
会创建20个额外用户。
答案 0 :(得分:3)
您可以在运行getPathPart = function(index){
if (index === undefined)
index = 0;
var path = window.location.pathname,
parts = path.split('/');
if (parts && parts.length > 1)
parts = (parts || []).splice(1);
return parts.length > index ? parts[index] : null;
}
时传递一个选项,如下所示:
getPathPart = function(index, getLastIndex){
if (index === undefined)
index = 0;
var path = window.location.pathname,
parts = path.split('/');
if (parts && parts.length > 1)
parts = (parts || []).splice(1);
if(getLastIndex){
return parts[parts.length - 1]
}
return parts.length > index ? parts[index] : null;
}
然后,在您的代码中,您可以通过以下方式访问它:
rake db:seed
答案 1 :(得分:3)
我已经使用了以下设置几年来帮助我的理智。
在db / seeds中,我有以下文件:
001_providers.rb
005_api_users.rb
007_mailing_lists.rb
010_countries.rb
011_us_states.rb
012_canadian_provinces.rb
013_mexican_states.rb
100_world_cities.rb
101_us_zipcodes.rb
我的db / seeds.rb文件如下所示:
if ENV['VERSION'].present?
seed_files = Dir[File.join(File.dirname(__FILE__), 'seeds', "*#{ENV['VERSION']}*.rb")]
raise "No seed files found matching '#{ENV['VERSION']}'" if seed_files.empty?
else
seed_files = Dir[File.join(File.dirname(__FILE__), 'seeds', '*.rb')]
end
seed_files.sort_by{|f| File.basename(f).to_i}.each do |file|
require File.join(File.dirname(__FILE__), 'seeds', File.basename(file, File.extname(file)))
end
让我运行一个或多个种子文件只需要一些ruby代码。我现在可以做这样的事情:
# run them all
bin/rake db:seed
# run just 001_providers.rb
bin/rake db:seed VERSION=001
# run all seeds for the USA (probably dangerous, but if you name your seeds right, could be useful).
bin/rake db:seed VERSION=us
一件非常重要的事情是,您的种子文件应该能够一遍又一遍地运行并最终保持一致状态。如果你一遍又一遍地运行你的种子,你最终会得到更多的用户而不仅仅是20个。
例如,我的提供者有一个像这样的主循环:
# providers is a hash of attributes...
providers.each_with_index do |(code, attrs), i|
p = Provider.find_by(code: code) || Provider.new(code: code) p.update!(attrs)
end
这种方式无论何时运行它,我总是回到我在哈希中定义的提供者。