`
苹果侠
  • 浏览: 11639 次
  • 性别: Icon_minigender_1
  • 来自: 上海
最近访客 更多访客>>
社区版块
存档分类
最新评论

Rails中的Migrations(六)

阅读更多

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文件中加载数据,并写入数据库,完成了基础数据的填充。
分享到:
评论

相关推荐

    mongoid_rails_migrations:Mongoid的数据迁移

    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的数据迁移.zip

    mongoid_rails_migrations, Mongoid的数据迁移 发行说明最新版本,1.1. x, 目标 Mongoid&gt; = 4.0.0和 Rails&gt; = 4.2.0.对于 Rails&gt; = 3.2.0和 Mongoid&gt; = 3.0.0,使用版本 1.0.0.

    Ruby on Rails中文指南

    在Ruby on Rails中文指南中,你将全面学习到如何利用这个强大的框架来构建动态的、数据驱动的Web应用程序。 首先,让我们深入理解Rails的核心概念: 1. **路由(Routes)**:Rails的路由系统是应用程序的导航蓝图...

    nova-rails-migrations:提供命令以轻松访问Rails项目中的迁移

    适用于Nova的Rails迁移扩展提供命令以轻松访问Rails项目中的迁移。特征快速打开最新的Rails迁移从您的迁移列表中选择一个特定的迁移安装下载最新。 解压缩档案。 双击RailsMigrations.novaextension将扩展安装在Nova...

    rails指南 中文版

    12. **Migrations**:Rails的迁移机制允许开发者通过Ruby代码来管理数据库结构的变化,使得数据库版本控制变得简单。 学习Rails指南中文版,开发者将全面了解Rails的各个方面,包括基础概念、核心组件、最佳实践...

    中文版rails教程

    2. **数据库迁移(Database Migrations)**:Rails使用ActiveRecord和SQLite、MySQL或PostgreSQL等数据库系统交互。开发者通过编写迁移文件来定义和修改数据库结构。 3. **路由(Routing)**:Rails的路由系统根据...

    Ruby on Rails入门例子

    - **数据库迁移(Database Migrations)**:Rails使用迁移来管理数据库结构的变化。通过`rails generate migration AddTitleToPosts title:string`创建迁移,然后运行`rails db:migrate`执行迁移。 - **...

    Rails3常用命令行命令

    此外,Rails的迁移(Migrations)系统允许你对数据库结构进行修改,如创建新表: ```bash rake db:create # 创建数据库 rake db:migrate # 应用迁移文件,生成对应的数据库表 ``` Rails的scaffold命令是一个强大的...

    component base rails applications

    - 探讨了组件化应用中的迁移(Migrations)管理,也就是如何在组件内处理数据表的迁移。 5. 组件类型: - 书中可能会提到不同类型的Rails引擎,比如Plain Engine、Full Engine和Mountable Engine,并解释它们之间...

    Ruby on Rails实例开发

    在Rails中,Ruby的元编程能力使得框架能够灵活地自定义和扩展。 Rails的核心理念是DRY(Don't Repeat Yourself),鼓励代码重用,避免重复编写相似的代码。此外,它还提供了大量的内置功能和库,如ActiveRecord用于...

    rails 项目起步示例

    在Rails项目中,我们首先需要了解的是项目的目录结构。一个标准的Rails应用会包含以下关键部分: 1. **app**:应用程序的核心,包括模型(models)、视图(views)和控制器(controllers)。模型负责业务逻辑和数据...

    rails向导打包

    4. **Rails 数据库迁移(Migrations)**: Migrations 是 Rails 中用于数据库结构版本控制的工具。它们允许开发者以编程方式添加、修改或删除表列,而不必直接操作 SQL。文件将涵盖创建、运行和回滚迁移,以及使用 `...

    Ruby+for+Rails

    在Rails中,可以配置数据库连接信息,使用`database.yml`文件。安装MySQL后,通过Gemfile中的`gem 'mysql2'`来添加MySQL驱动,接着运行`bundle install`安装依赖。 4. **Rails基础知识** - **模型(Model)**:...

    web开发之rails最新调试通过购物车代码

    6. **数据库迁移(Database Migrations)**:Rails提供了方便的工具来创建和更新数据库结构。购物车功能可能涉及到创建新的表,如`cart_items`和`orders`。 7. **测试(Testing)**:为了确保代码的健壮性和正确性...

    RAILS2.1的中文版资料

    该文档详细介绍了Rails 2.1版本中引入的新特性和改进之处,对于Rails开发者来说,是一份非常有价值的参考资料。 #### 新特性介绍 **时间区(Timezones)** Rails 2.1增加了对时区的支持,这意味着应用程序可以更...

    Ruby on Rails入门经典代码

    本压缩包中的"Ruby on Rails入门经典代码"提供了新手学习Rails的宝贵资源,帮助初学者快速掌握这个强大的框架。 1. **Rails基础知识**: - MVC架构:Rails的核心设计模式,模型负责数据处理,视图负责展示,控制器...

    基于ruby on rails开发示例源码

    在Rails中,`模型`负责处理数据和业务逻辑,`视图`负责展示用户界面,而`控制器`则作为模型和视图之间的桥梁,处理用户请求并协调它们之间的交互。Rails的许多特性,如ActiveRecord(ORM)、ActiveModel、Action...

    Agile Web Development with Rails 4th edition(敏捷Web开发与Rails:程序指南 第四版)

    7. **Migrations and Database Schema**: 书中详细讲解了如何使用Rails的迁移(migrations)来管理数据库结构的变化,以及如何编写有效的数据库模式(schema)。 8. **Testing**: 对于Rails应用,测试是必不可少的一...

    Ruby on Rails入门经典-例子

    3. **数据库迁移(Migrations)**:Rails提供了一种方便的方式来管理数据库结构的改变,即迁移。在`db/migrate`目录下创建迁移文件,通过运行`rake db:migrate`命令,你可以同步数据库结构与应用的模型。 4. **视图...

Global site tag (gtag.js) - Google Analytics