首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在迁移时添加行

在迁移时添加行
EN

Stack Overflow用户
提问于 2009-01-06 02:51:22
回答 5查看 25.7K关注 0票数 22

我想知道在Rails迁移中向数据库表添加记录的首选方法是什么。我在Ola Bini的书(Jruby on Rails)上读到他这样做:

代码语言:javascript
复制
class CreateProductCategories < ActiveRecord::Migration

  #defines the AR class
  class ProductType < ActiveRecord::Base; end

  def self.up

    #CREATE THE TABLES...

    load_data
  end
  def self.load_data
    #Use AR object to create default data
    ProductType.create(:name => "type")
  end
end

这是很好和干净的,但由于某些原因,不能在最新版本的rails上工作……

问题是,如何使用默认数据(如用户或其他数据)填充数据库?

谢谢!

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2009-01-07 00:05:07

为此,您可以使用fixture。这意味着在某个地方有一个包含您想要插入的数据的yaml文件。

以下是我在我的一个应用程序中为此提交的更改集:

db/migrate/004_load_profiles.rb

代码语言:javascript
复制
require 'active_record/fixtures'

class LoadProfiles < ActiveRecord::Migration
  def self.up
    down()

    directory = File.join(File.dirname(__FILE__), "init_data")
    Fixtures.create_fixtures(directory, "profiles")
  end

  def self.down
    Profile.delete_all
  end
end

db/migrate/init_data/profiles.yaml

代码语言:javascript
复制
admin:
 name: Admin
  value: 1
normal:
 name: Normal user
  value: 2
票数 10
EN

Stack Overflow用户

发布于 2009-03-07 11:36:25

迁移的Rails API文档显示了一种更简单的方法来实现这一点。

http://api.rubyonrails.org/classes/ActiveRecord/Migration.html

代码语言:javascript
复制
class CreateProductCategories < ActiveRecord::Migration
  def self.up
    create_table "product_categories" do |t|
      t.string name
      # etc.
    end

    # Now populate the category list with default data

    ProductCategory.create :name => 'Books', ...
    ProductCategory.create :name => 'Games', ... # Etc.

    # The "down" method takes care of the data because it
    # drops the whole table.

  end

  def self.down
    drop_table "product_categories"
  end
end

在Rails 2.3.0上测试过,但这应该也适用于许多早期版本。

票数 40
EN

Stack Overflow用户

发布于 2010-03-19 23:22:30

您还可以在seeds.rb文件中定义,例如:

代码语言:javascript
复制
Grid.create :ref_code => 'one' , :name => 'Grade Única'

在运行之后:

代码语言:javascript
复制
rake db:seed
票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/415287

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档