我想知道在Rails迁移中向数据库表添加记录的首选方法是什么。我在Ola Bini的书(Jruby on Rails)上读到他这样做:
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上工作……
问题是,如何使用默认数据(如用户或其他数据)填充数据库?
谢谢!
发布于 2009-01-07 00:05:07
为此,您可以使用fixture。这意味着在某个地方有一个包含您想要插入的数据的yaml文件。
以下是我在我的一个应用程序中为此提交的更改集:
db/migrate/004_load_profiles.rb
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
admin:
name: Admin
value: 1
normal:
name: Normal user
value: 2
发布于 2009-03-07 11:36:25
迁移的Rails API文档显示了一种更简单的方法来实现这一点。
http://api.rubyonrails.org/classes/ActiveRecord/Migration.html
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上测试过,但这应该也适用于许多早期版本。
发布于 2010-03-19 23:22:30
您还可以在seeds.rb文件中定义,例如:
Grid.create :ref_code => 'one' , :name => 'Grade Única'
在运行之后:
rake db:seed
https://stackoverflow.com/questions/415287
复制相似问题