标签: rails-migrations

ActiveRecord数据类型的文档页面在哪里?

我找不到包含所有数据类型列表的活动记录文档页面.

有人可以帮我吗?

ruby-on-rails rails-migrations

72
推荐指数
4
解决办法
4万
查看次数

Rails 3.1.0迁移中remove_index的正确语法是什么?

我正在将Devise添加到现有的Rails应用程序中,并且已经定义了Users表.设计生成器推出了以下迁移:

class AddDeviseToUsers < ActiveRecord::Migration
  def self.up
    change_table(:users) do |t|

     ## Database authenticatable
     t.string :email,              :null => false, :default => ""
     t.string :encrypted_password, :null => false, :default => ""

     ## Recoverable
     t.string   :reset_password_token
     t.datetime :reset_password_sent_at

     ## Rememberable
     t.datetime :remember_created_at

     ## Trackable
     t.integer  :sign_in_count, :default => 0

     blah blah blah....

   end

   add_index :users, :email,                :unique => true
   add_index :users, :reset_password_token, :unique => true
 end
Run Code Online (Sandbox Code Playgroud)

没有生成向下迁移,我有一点时间删除这些索引.我在文档中看到了不同的建议表示法,并在网上提出了不同的建议,但似乎没有一个对我有用.例如...

def self.down
  change_table(:users) do |t|
    t.remove  :email
    t.remove  :encrypted_password

    t.remove  :reset_password_token

    blah blah blah...
  end

  remove_index …
Run Code Online (Sandbox Code Playgroud)

ruby-on-rails rails-migrations ruby-on-rails-3.1

64
推荐指数
4
解决办法
5万
查看次数

如何使用rails控制台从表中删除列

使用rails迁移很容易删除列.

class SomeClass < ActiveRecord::Migration
  def self.up
    remove_column :table_name, :column_name
  end
end
Run Code Online (Sandbox Code Playgroud)

我想知道是否有任何方法可以使用控制台从表中删除列.

activerecord ruby-on-rails rails-migrations ruby-on-rails-3.2

59
推荐指数
1
解决办法
2万
查看次数

has_many,belongs_to关系在活动记录迁移rails 4中

我创建了一个User模型,后来创建了一个Task模型.创作时我没有提到它们之间的任何关系.

我理解User has_many Tasks和a Task belongs_to User.我需要通过迁移在它们之间建立这种关系.

我的问题是,建立这种关系的迁移生成命令是什么?

任何帮助将受到高度赞赏.

ruby-on-rails rails-migrations ruby-on-rails-4 rails-activerecord

59
推荐指数
4
解决办法
6万
查看次数

为什么我要求运行'rake db:migrate RAILS_ENV = test'?

在Rails 4.0.0.rc1,Ruby 2.0.0上,运行迁移后,当我尝试运行测试时,我看到以下错误rspec:

/Users/peeja/.rbenv/versions/2.0.0-p0/lib/ruby/gems/2.0.0/gems/activerecord-4.0.0.rc1/lib/active_record/migration.rb:376:in`check_pending! ':正在等待迁移; 运行'rake db:migrate RAILS_ENV = test'来解决此问题.(ActiveRecord的:: PendingMigrationError)

这似乎不对.没有人迁移他们的测试数据库,是吗?他们db:test:prepare,这是公平的 - 我忘了做.所以我再次运行rake db:test:prepare并运行我的rspec命令......并看到同样的错误.

如果我真的rake db:migrate RAILS_ENV=test,错误确实消失了.

这是怎么回事?这是Rails 4中的新功能吗?

ruby-on-rails rails-migrations ruby-on-rails-4

58
推荐指数
4
解决办法
9万
查看次数

在Rails 3中删除表并删除模型的最佳方法是什么?

我有一个模型和一个桌子,我不再需要在我的应用程序中,我可以将它们留在那里,但我想删除它们以保持整洁.

我正在试图找出删除它们的最佳方法,而不是弄乱我的迁移db/schema.rb文件以及它可能对我的生产环境产生的任何副作用,我的应用程序在Heroku上.我在我的本地机器和heroku上使用PostgreSQL.

到目前为止,我已经找到了两种方法,但我不确定哪种方法最好?

方法1

我想过要进入我的数据库并丢弃表然后销毁模型.

rails db
DROP TABLE table_name
\q
rails destroy model model_name
Run Code Online (Sandbox Code Playgroud)

如果我这样做,我对此模型/表的迁移会发生什么?我有两个此模型的迁移,一个timestamp_create_modelname和一个add_attribute_to_table名称.

此方法也会更新db/schema.rb文件吗?

当我将应用程序推送到Heroku时,我怀疑模型将被删除但是表格将保留在原位,是否有一个heroku命令来删除表格.

方法二

我读到的另一种方法是生成一个新的迁移以删除表然后销毁模型.

rails generate migration drop_tablename
Run Code Online (Sandbox Code Playgroud)

然后更新以下文件:

db/migrate/timestamp_drop_tablename (根据Dan Wich的回答更新)

class DropTablename < ActiveRecord::Migration
  def up
    drop_table :tablename
  end

  def down
    create_table :tablename do |t|
      t.string :table_column
      t.references :anothertable

      t.timestamps        
    end
    add_index :tablenames, :anothertable_id
  end
end
Run Code Online (Sandbox Code Playgroud)

然后在终端:

rake db:migrate
rails destroy model model_name
rake db:migrate
git add .
git commit -m "removed table/model_name"
git …
Run Code Online (Sandbox Code Playgroud)

heroku rails-models rails-migrations ruby-on-rails-3

53
推荐指数
2
解决办法
3万
查看次数

Rails迁移:add_reference到表但外键比Rails公约的列名不同

我有以下两种型号:

class Store < ActiveRecord::Base
    belongs_to :person
end

class Person < ActiveRecord::Base
    has_one :store
end
Run Code Online (Sandbox Code Playgroud)

这是问题所在:我正在尝试创建迁移以在people表中创建外键.但是,引用Store外键的列未命名为store_id,因为它是rails约定,而是命名为foo_bar_store_id.

如果我遵循rails约定,我会像这样进行迁移:

class AddReferencesToPeople < ActiveRecord::Migration
  def change
    add_reference :people, :store, index: true
  end
end
Run Code Online (Sandbox Code Playgroud)

但是这不起作用,因为列名不是store_id,而是foo_bar_store_id.那么我如何指定外键名称只是不同,但仍保持索引:true以保持快速性能?

ruby-on-rails rails-migrations

52
推荐指数
5
解决办法
4万
查看次数

当我运行rake:db migrate命令时出现错误"未初始化的常量CreateArticles"

我创建了一个模型ruby脚本/生成模型文章(简单enuff)

这是迁移文件create_articles.rb:

def self.up
  create_table :articles do |t|
    t.column :user_id, :integer
    t.column :title, :string
    t.column :synopsis, :text, :limit => 1000
    t.column :body, :text, :limit => 20000
    t.column :published, :boolean, :default => false
    t.column :created_at, :datetime
    t.column :updated_at, :datetime
    t.column :published_at, :datetime
    t.column :category_id, :integer
  end

def self.down
  drop_table :articles
 end
end
Run Code Online (Sandbox Code Playgroud)

当我运行rake:db migrate命令时,我收到一个错误rake中止!"未初始化的常量CreateArticles."

有谁知道为什么这个错误不断发生?

rake ruby-on-rails rails-migrations

51
推荐指数
2
解决办法
2万
查看次数

Rails为连接表命名约定

这个问题源于:如何在创建rails join表之后链接表单

我正在创建产品和类别模型之间的连接表.

连接表应该命名为什么?categories_products或category_products或其他什么?

ruby-on-rails rails-migrations ruby-on-rails-3 ruby-on-rails-3.1

50
推荐指数
2
解决办法
3万
查看次数

使用Rails迁移删除列将删除与该列关联的索引

在Rails 2中,删除带有Rails迁移的列还会更改/删除与列关联的索引吗?如果没有,而且您还必须手动更改/删除每个索引,那么它是否应该自动化?

谢谢(来自Rails新手)

ruby-on-rails rails-migrations

48
推荐指数
4
解决办法
1万
查看次数