我有数据库脚本,它创建了包含100多个表和大量数据的数据库.对于我来说,为整个数据库创建Rails迁移类是一项繁琐的工作.但我认为Rails Migration是长期数据库变更管理的一个很好的选择.请提示一些从MYSQL数据库实例自动生成Rails Migrate类的方法.
每当我必须在rails中执行HABTM时,我总是发现自己想知道是否可以从命令行生成所需的迁移.
我希望通过这样做来节省时间:
rails g migration tracks_podcasts tracks:references podcasts:references id:false
Run Code Online (Sandbox Code Playgroud)
上面的代码不起作用,也没有它的几个变体(有和没有id:false指令)
是否可以在一个轨道中创建(self.up)多个表三个迁移.如果可能,那么使用这种方法的传统智慧是什么.有些东西告诉我,每次迁移保留一张桌子会更好,但我只是想在railers上查看更多经验丰富的红宝石.
谢谢.
我试图在Rails 3中运行迁移,我希望在表中添加一列,代码如下所示:
class AddConstAdr < ActiveRecord::Migration
def change
change_table: constants do |t|
t.add_column :home_address, :string
end
end
end
Run Code Online (Sandbox Code Playgroud)
当我这样做时,rake db:migrate我得到一个错误,说明未定义的方法'add_column'.我很困惑为什么会这样,有人可以帮忙吗?
有没有一种方法只能在测试环境中运行迁移?
由于暂存和生产数据库已经存在,因此我只想在测试环境中创建表并将数据植入种子。
testing unit-testing test-environments rails-migrations ruby-on-rails-3.2
stackoverflow新手在这里,虽然我已经多次在这里寻找过去有用的答案.这是我的第一个问题,所以请你好:)
我一直试图通过添加(或修改)create_table命令附带的选项哈希来弄清楚如何在Rails中的ActiveRecord Migration中更改表.更具体地说,我正在尝试将使用整数ID的模型转换为在Rails 4.0和postgresql 9.1.9中使用UUID的模型.
例如,我的架构目前看起来像这样:
create_table :users do |t|
t.string :name
t.timestamps
end
Run Code Online (Sandbox Code Playgroud)
我想创建一个迁移将其更改为这个(继UUID指南这里):
create_table :users, id: false do |t|
t.primary_key :id, :uuid, :default => 'uuid_generate_v1()'
t.string :name
t.timestamps
end
Run Code Online (Sandbox Code Playgroud)
我可以添加/删除/更改列,但我无法弄清楚如何将其id: false放入表中.到目前为止,我想出的唯一方法是通过完全核对表格drop_table :users,然后重新创建它,这对我来说似乎效率低下.是否有一些ActiveRecord方法我可以调用添加选项哈希?试图谷歌它没有成功,但也许我不知道什么是正确的搜索查询?
任何帮助,将不胜感激.提前致谢!
编辑:语法.
我正在尝试使用rake任务(rake data:import)从csv fle导入数据并且收到错误.过去几个月我一直在教自己,但经过一天半的谷歌搜索后,我找到了许多解决方案,但没有一个可以开始工作.
到目前为止,我的rake文件就在这里:
require 'CSV'
namespace :data do
desc "Import teams from csv file"
task :import => [:environment] do
file=IO.read('filepath of my csv').force_encoding("ISO-8859-1").encode("utf-8", replace: nil)
CSV.foreach(file, :headers => true) do |row|
product.create ([
:name => row['name'],
:rating => row['rating'],
:year => row['year'],
:country => row['country'],
:state_or_province => row['state_or_province']]
)
end
end
end
Run Code Online (Sandbox Code Playgroud)
我没有得到任何具体的错误(据我所知).混淆我的输出是:
tasks/dataimport.rake:7:in `block (2 levels) in <top (required)>'
Run Code Online (Sandbox Code Playgroud)
该输出是否表明具体发生了什么?
我在Postgres DB表中有一个列是布尔类型.我想将它更改为整数,因为我需要的不仅仅是该列中的true/false.
我还想将所有真值更改为1,将假值更改为2.
这很容易在Rails中完成吗?我试图通过迁移文件和迁移我的数据库来做到这一点.
ruby postgresql ruby-on-rails rails-migrations ruby-on-rails-4
我有一个模型用户,我们有primary_key作为user_id而不是id,我知道我应该使用id为primary_key,但客户希望我们应该使用user_id而不是id.
我有另一个表,我必须将该表与user_id相关联
我正在为其他表添加这样的迁移:
t.references :user, index: true, foreign_key: true
Run Code Online (Sandbox Code Playgroud)
但是当我运行迁移时,我得到一个与外键约束相关的错误,例如:
ActiveRecord :: StatementInvalid:PG :: UndefinedColumn:ERROR:外键约束中引用的列"id"不存在ALTER TABLE"user_devices"ADD CONSTRAINT"fk_rails_e700a96826"FOREIGN KEY("user_id")REFERENCES"users"("id")
似乎rails默认尝试将其他表指向id列,但我在users表中有user_id.
那么如何添加外键约束,如:
ALTER TABLE "user_devices" ADD CONSTRAINT "fk_rails_e700a96826"
FOREIGN KEY ("user_id")
REFERENCES "users" ("user_id")
Run Code Online (Sandbox Code Playgroud)
使用rails迁移?
经过长时间的中断后我想回到RoR,当我试图rails db:migrate:
rails aborted!
StandardError: An error has occurred, this and all later migrations canceled:
Directly inheriting from ActiveRecord::Migration is not supported. Please specify the Rails release the migration was written for:
Run Code Online (Sandbox Code Playgroud)
错误继续......
我正在考虑它的原因gem ratyrate.
在其中一个迁移文件中:
class CreateRatingCaches < ActiveRecord::Migration
def self.up
create_table :rating_caches do |t|
t.belongs_to :cacheable, :polymorphic => true
t.float :avg, :null => false
t.integer :qty, :null => false
t.string :dimension
t.timestamps
end
add_index :rating_caches, [:cacheable_id, :cacheable_type]
end
def self.down
drop_table :rating_caches
end
end …Run Code Online (Sandbox Code Playgroud) rails-migrations ×10
ruby ×5
csv ×1
database ×1
migration ×1
mysql ×1
postgresql ×1
rake ×1
testing ×1
unit-testing ×1
uuid ×1