Data Migrations:
之前写到过,所有的migrations文件都是有ruby代码组成,而且migration中的ruby代码可以和Rails中的其他部分代码进行交互,特别是model类。因此使用migration可以很方便的完成各种数据迁移和操作开发环境数据库内的数据。一下展示了两种截然不同的data migration的应用场景:载入开发环境数据和在不用的数据版本间切换。
Loading Data with Migrations:
在实际开发中,我们常常需要向数据库中插入大量的基础数据,例如各种lookup
table的记录(即编码表),产品目录等。在以往的开发过程中,开发人员往往手动书写sql语句来完成基础数据的填充。但是sql脚本总是难以维护和重
用。而Rails
Migration则使这些工作变的简单,只需在migration中建立一些单纯的数据迁移的migration,(单单填充数据,而不会影响到表结构
改变的migration)就可以轻松的完成需要的工作。
请注意,这里提到的基础数据是有实际应用意义的数据,和Rails Test中提到的测试用数据是不同的事情。
假设系统中的discounts需要添加一些基础数据,可以使用以下的代码进行操作:
class TestDiscounts < ActiveRecord::Migration
def self.up
down
rails_book_sku = Sku.find_by_sku("RAILS-B-00")
ruby_book_sku = Sku.find_by_sku("RUBY-B-00")
auto_book_sku = Sku.find_by_sku("AUTO-B-00")
discount = Discount.create(:name => "Rails + Ruby paper",
:action => "DEDUCT_AMOUNT",
:amount => "15.00")
discount.skus = [rails_book_sku, ruby_book_sku]
discount.save
discount = Discount.create(:name => "Automation Sale",
:action => "DEDUCT_PERCENT",
:amount => "5.00")
discount.skus = [auto_book_sku]
discount.save
end
def self.down
Discount.delete_all
end
end
在上述代码中,migration充分运用了与现有Active Record交互的能力,利用已有的model类Sku从数据库中读取已有的记录,然后与需要新建的discount类进行关联,最后将填充完成的discount进行持久化,写入数据库中。
请注意,在self.up方法的开头,调用了down方法,而down方法中会将discounts中的所有记录进行删除,这样在执行migration就不会插入重复数据了,这是在一种在data-only的数据迁移中惯用的一种模式。
Loading Data from Fixtures
fixtures中往往存放了测试用的填充数据,但是可以在migration使用fixtures完成基础数据迁移的功能。假设以下的一个应用场景:
在系统中有一张users表,需要事先导入一些用户数据。首先在应用的db/migrate/下建一个dev_data目录,在这个目录中新建一个users.yml文件,该文件内容如下:
dave:
name: Dave Thomas
status: admin
mike:
name: Mike Clark
status: admin
fred:
name: Fred Smith
status: audit
然后使用命令:ruby script/generate migration load_users_data 生成一个migration文件,打开该文件,添加以下代码:
require 'active_record/fixtures'
class LoadUserData < ActiveRecord::Migration
def self.up
down
directory = File.dirname(__FILE__) + "/dev_data/"
Fixtures.create_fixtures(directory, "users")
end
def self.down
User.delete_all
end
end
这段代码直接从事先建好的yml文件中加载数据,并写入数据库,完成了基础数据的填充。
分享到:
- 2008-11-24 19:18
- 浏览 1528
- 评论(0)
- 论坛回复 / 浏览 (0 / 1484)
- 查看更多
相关推荐
gem "mongoid_rails_migrations" 如何使用 创建迁移 $ rails generate mongoid:migration 运行迁移: $ rails db:migrate $ rails db:migrate:down VERSION= $ rails db:migrate:up VERSION= $ rails db:rollback...
mongoid_rails_migrations, Mongoid的数据迁移 发行说明最新版本,1.1. x, 目标 Mongoid> = 4.0.0和 Rails> = 4.2.0.对于 Rails> = 3.2.0和 Mongoid> = 3.0.0,使用版本 1.0.0.
适用于Nova的Rails迁移扩展提供命令以轻松访问Rails项目中的迁移。特征快速打开最新的Rails迁移从您的迁移列表中选择一个特定的迁移安装下载最新。 解压缩档案。 双击RailsMigrations.novaextension将扩展安装在Nova...
Get your front end working with Webpack, use Postgres' features from migrations, and write unit tests for all of it. All of this within Rails 5. You'll gain the confidence to work at every level of ...
卡桑德拉迁移描述Cassandra Migrations是用于Rails应用程序的Cassandra数据库架构迁移库。 该宝石提供: 多环境数据库配置版本化的CQL模式迁移管理用于简化迁移代码的模式修改DSL 用于数据库架构管理的瑞克任务支持...
警告:good_migrations当前不适用于zeitwerk,这是Rails中的当前自动加载器实现。 参见 该gem防止Rails在运行迁移时自动加载应用程序代码,从而避免了从迁移代码引用ActiveRecord模型的常见错误。 用法 将good_...
readers should already be familiar with a few important Rails components such as bundler, migrations, models, views, and controllers. Basic knowledge of relational databases such as Ruby, HTML, and ...
当项目发展时,您的数据库开始变得繁重,并且在部署过程中更改数据可能会非常痛苦。 有很多原因使您希望此过程是[至少]部分异步的。 大多数人将繁重的数据更改变成rake tasks或拆分工作人员。 关于这一点有两种思想...
允许您在非Rails项目中使用ActiveRecord迁移。 安装 将此行添加到应用程序的Gemfile中(如果没有,请运行bundle init ): gem 'active_record_migrations' gem 'sqlite3' # or 'pg', 'mysql2', ... 然后执行: ...
You’ll get your front-end working with the Asset Pipeline, use Postgres’ features from migrations, and write unit tests for all of it. All of this within Rails. You’ll gain the confidence to work...
在内部,我们通过此gem将这些最佳实践应用于我们的Rails应用程序,该更新更新了ActiveRecord迁移,以清楚地描述安全和不安全的DDL,并在可能的情况下提供安全的替代方法。 一些项目试图通过让代码确定意图并神奇地...
非Rails(和非Ruby)项目中的Rails迁移。 什么是新的 在6.x版本中,由于增加了对Rails 6迁移的支持。 在5.x版本中,我们转向使用Rails 5迁移,而不是维护我们自己的迁移相关代码。 使用Rails 5迁移几乎可以做的任何...
没有Rails的ActiveRecord 只是在没有Rails的情况下使用... snipActiveRecord::Migrator.migrate("lib/db/migrations/")证明它有效: 您可以运行该东西以表明它将连接ruby ar-no-rails 输出: 页数:0 最后,您可以I
! Like this gem? Please 'star' it (above), download it from RubyGems, or ... ...! 只需每月$ 1,您就可以支持该Gem及其它... 数据迁移的运行方式与模式迁移完全相同,除了运行数据迁移以处理应用程序中的数据,入
$ bin/rails passwordless:install:migrations 用法 无密码创建一个名为Passwordless::Session模型。 它没有自己的User模型,它希望您创建一个模型: $ bin/rails generate model User email 然后使用以下命令指定...
flyway-rails 用于 Rails 数据库迁移的薄包装器 ...Flyway::Rails::MIGRATION_DIRECTORY = 'path/to/your/migrations' 然后,您可以通过运行以下命令列出新的 rake 任务: $ rake -T | grep flyway
在Rails API中创建CRUD的框架。 安装 将此行添加到您的应用程序的Gemfile中: gem 'croods' 然后执行: $ bundle 用法 资源资源 资源是应用程序需要表示的任何对象的通用抽象。 代替app/models/和app/...
安装将此行添加到应用程序的Gemfile中: gem 'holiday_workday' 然后执行: $ bundle 安装引擎$ bin/rails holiday_workday:install:migrations$ bin/rails db:migrate SCOPE=holiday_workday 登上holiday_workday ...
$ rails generate alexa : migrations $ rake db : migrate 配置 添加config/initializers/alexa.rb并添加以下配置 Alexa . configure do | config | # Location permissions type config . locatio
rake morrigan_editor_rails:install:migrations rake db:migrate 添加到application.js : // = require 'morrigan_editor_rails/application' 添加到“application.css”: * = require 'morrigan_editor_...