我有以下情况:
我开始开发一个长项目(大约6个月),我需要有一些关于数据库的信息才能测试我的功能。问题是,现在,我没有表格来插入这些信息(我将来会)但我需要在DB上加载的信息,处理这个问题的最佳方法是什么?特别考虑到应用程序完成后,我将不再需要此过程。
举个例子,假设我有需要分类的任务。我已经开始处理这些任务,但我需要在我的数据库上加载一些类别。
我正在使用Rails 3.1顺便说一句。
提前致谢!
修改
关于种子:我被告知如果您的数据可能会有所不同,种子不是可行的方法,因为您必须删除所有信息并重新插入。说..我想更改或添加类别,然后我必须编辑seeds.rb文件,进行我的修改,然后删除并重新加载所有数据....,还有另一种方法吗?或者种子是解决这个问题的最佳方法吗?
答案 0 :(得分:2)
因此,您可能会在沿着与其他数据混合的方式添加,更改或删除数据。所以seeds.rb就出来了。您需要使用的是迁移。这样,您就可以搜索并识别要通过顺序过程更改的数据,这些过程是为其精确设计的。否则我认为最好的办法是通过rails控制台手动更改数据。
编辑:一个很好的例子如下。
您正在使用Capistrano来处理您的部署。您想要在系统中添加一个新的类别玩具。在迁移文件中,您可以在迁移功能中添加Category.create(:name => "Toys")
或类似内容(我忘记了他们现在在Rails 3.1中所称的内容,我知道只有一种方法),在本地运行rake db:migrate
,测试您的更改,提交它们,然后如果可以接受使用cap:deploy
部署它,并且将针对您的生产数据库运行新迁移,插入新类别,并使其可用于已部署的应用程序。
除此之外,它实际上取决于您的工作流程。如果您认为通过迁移添加新数据不会影响您的应用程序,那么请继续使用它。我会说DHH(David Heinemeier Hansson)不是它的粉丝,因为他严格用它来改变数据库的结构。如果您不知道DHH是Rails的创建者。
编辑2: 我刚才想到的一个想法,如果你对它不满意,可以跳过使用迁移的概念。你可以100%依赖你的db / seeds.rb文件。当你想到“seeds.rb”时,你会考虑创建信息,但这并不一定是这种情况。您可以检查相关数据是否已经存在,而不是盲目地创建数据,如果确实存在则修改并保存数据,但如果它不存在则只需创建一个简单明了的新记录。
的分贝/ seeds.rb 强> 的
toys = Category.find_by_name("Toys")
if toys then
toys.name = "More Toys"
toys.save
else
Category.create(:name => "More Toys")
end
运行rake db:seeds
,该代码将运行。您只需要在每次更改数据时不断更新seeds.rb文件,以便1)它正在搜索正确的数据值,2)它正在更新正确的属性。
最终没有正确或错误的方法来做到这一点,它只适用于您和您的工作流程。
答案 1 :(得分:0)
加载开发数据的地方是db/seeds.rb
。由于您可以在那里编写任意Ruby代码,因此您甚至可以从外部文件加载您的开发数据。
答案 2 :(得分:0)
有一个名为db / seeds.rb的文件
您可以使用它来实例化记录
user1=User.create(:email=>"user@test.com",
:first_name=>"user",
:last_name=>"name",
:bio=>"User bio...",
:website=>"http://www.website.com",
:occupation=>"WebDeveloper",
:password=>"changeme",
:password_confirmation=>"changeme",
:avatar => File.open(File.join(Rails.root, '/app/assets/images/profiles/image.png'))
)
user2=User.create(:email=>"user2@test.com",
:first_name=>"user2",
:last_name=>"name2",
:bio=>"User2 bio...",
:website=>"http://www.website.com",
:occupation=>"WebDeveloper",
:password=>"changeme",
:password_confirmation=>"changeme",
:avatar => File.open(File.join(Rails.root, '/app/assets/images/profiles/image.png'))
)
只需从命令行运行rake db:seed
即可将其导入数据库