Rails:处理开发数据的最佳实践

时间:2011-10-14 17:12:11

标签: ruby-on-rails-3 coding-style standards

我有以下情况:

我开始开发一个长项目(大约6个月),我需要有一些关于数据库的信息才能测试我的功能。问题是,现在,我没有表格来插入这些信息(我将来会)但我需要在DB上加载的信息,处理这个问题的最佳方法是什么?特别考虑到应用程序完成后,我将不再需要此过程。

举个例子,假设我有需要分类的任务。我已经开始处理这些任务,但我需要在我的数据库上加载一些类别。

我正在使用Rails 3.1顺便说一句。

提前致谢!

修改

关于种子:我被告知如果您的数据可能会有所不同,种子不是可行的方法,因为您必须删除所有信息并重新插入。说..我想更改或添加类别,然后我必须编辑seeds.rb文件,进行我的修改,然后删除并重新加载所有数据....,还有另一种方法吗?或者种子是解决这个问题的最佳方法吗?

3 个答案:

答案 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即可将其导入数据库