Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/52.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 在不使用rails中的迁移的情况下更新DB架构_Ruby On Rails_Ruby_Database_Schema_Rake - Fatal编程技术网

Ruby on rails 在不使用rails中的迁移的情况下更新DB架构

Ruby on rails 在不使用rails中的迁移的情况下更新DB架构,ruby-on-rails,ruby,database,schema,rake,Ruby On Rails,Ruby,Database,Schema,Rake,我正在寻找一个自动更新模式的命令,而不必编写迁移文件 例如,当我启动一个Java Hibernate应用程序时,通过一些配置,DB模式会自动生成和更新。据我所知,这在ActiveRecord中是不可能的,但如果您不介意更改ORM,您可以改为查看 使用DM,您可以在模型代码本身中定义模型的“属性”(attributes),然后只需运行rake db:automigrate即可更新数据库的模式,例如 class Blog property :title, String property

我正在寻找一个自动更新模式的命令,而不必编写迁移文件


例如,当我启动一个Java Hibernate应用程序时,通过一些配置,DB模式会自动生成和更新。

据我所知,这在ActiveRecord中是不可能的,但如果您不介意更改ORM,您可以改为查看

使用DM,您可以在模型代码本身中定义模型的“属性”(attributes),然后只需运行rake db:automigrate即可更新数据库的模式,例如

class Blog
  property :title,    String
  property :body,     Text
  property :user_id,  Integer, :required => true
end
有你可以

示例(使用sqlite,但其他适配器也是如此)

首先,正常启动:

require "sequel"
DB = Sequel.sqlite(DB_NAME)

# create an items table
DB.create_table :items do
  primary_key :id
  String :name
  Float :price
end

# [....]

require "sequel"
DB = Sequel.sqlite('test.db')

# create an items table
DB.create_table :items do
  primary_key :id
  String :name
  Float :price
end
稍后,您可以修改该表:

DB.add_column :items, :valid_from, Date
可以进行以下修改(可能还有更多):

  • 添加列
  • 添加索引
  • 创建视图
  • 下降柱
  • 下降指数
  • 升降台
  • 下拉视图
  • 重命名表
  • 重命名列
  • 设置\u列\u默认值
  • 设置列类型

rake
结合使用,您可以执行以下操作:

require "rake"
require "sequel"

task :connect do
  DB = Sequel.sqlite('test.db')
end

desc 'create an items table'
task :create_items => :connect do
  DB.create_table :items do
    primary_key :id
    String :name
    Float :price
  end
end

task :add_dates_to_items => :connect do
  #check if items exist is missing
  DB.add_column :items, :valid_from, Date
end
备注:迁移有助于避免错误的模式修改顺序。通过迁移,您可以定义正确的顺序。实际状态已存储,您可以降级