我有一个rails项目,我需要在数据库表中添加一些默认值。我想知道这些最好的方法(我使用rails 2.3.3没有seed.rb文件:()
1 - 创建sql脚本
2 - 创建迁移
3 - 创建佣金任务
4 - 其他(请解释)
提前致谢
欢呼声
sameera
答案 0 :(得分:0)
看看seed-fu。
答案 1 :(得分:0)
在当前稳定版本的Rails(2.3.8)中,有rake task db:seed,它在db / seeds.rb文件中执行代码。在该文件中,您可以通过直接执行Rails代码(News.create:title =>“test”...)来加载数据,或者使用您喜欢的任何其他方法。
我更喜欢从灯具加载数据,因为灯具可以在以后的测试中使用。我正在使用rspec,所以我的灯具存储在spec / fixtures /目录中。
您可以使用下一代码从现有的sql表中制作灯具:
def make_fixtures(tablenames, limit = nil)
sql = "SELECT * FROM %s"
sql += " LIMIT #{limit}" unless limit.nil?
dump_tables = tablenames.to_a
dump_tables.each do |table_name|
i = "000"
file_name = "#{RAILS_ROOT}/spec/fixtures/#{table_name}.yml"
puts "Fixture save for table #{table_name} to #{file_name}"
File.open(file_name, 'w') do |file|
data = ActiveRecord::Base.connection.select_all(sql % table_name )
file.write( data.inject({}) do |hash, record|
hash["#{table_name}_#{i.succ!}"] = record
hash
end.to_yaml )
end
end
end
在db / seeds.rb中,您可以从灯具加载:
require 'active_record/fixtures'
[ "classifiers", "roles", "countries", "states", "metro_areas" ].each do |seed|
puts "Seeding #{seed}..."
Fixtures.create_fixtures(File.join(Rails.root, "spec", "fixtures"), seed)
end