标签: rails-migrations

从Django到Rails,你如何继续使用rails模型?

最近我从django开发转换为全时轨道工作,这是一个相当小的商店,我正在从书本中随手拿起东西.

上周,当我了解到rails的模型没有镜像数据库中的内容时,我的心理模型受到重创.

请参阅差异示例:http://www.peterkrantz.com/2009/rails-grails-django-models/

我很好奇的是,我如何不断修改模型以支持新的数据类型和关系?

另外,有没有办法在模型文件中显示特定类的表中的所有属性?

谢谢

ruby-on-rails django-models rails-models rails-migrations

3
推荐指数
1
解决办法
238
查看次数

rake db:create和rake db:migrate idempotent?

我是新来的Rails,我试图找出如果rake db:createrake db:migrate是幂等.

换句话说,我可以反复对我的DB(postgres或mysql)运行这两个命令而不会导致问题吗?

我们的想法是自动化Rails部署,并在每次部署Rails应用程序时运行这些命令.我想确保它不会以某种方式弄乱数据库.

任何其他关于rake db迁移的幂等性的问题都非常受欢迎.

rake ruby-on-rails rails-migrations

3
推荐指数
1
解决办法
1508
查看次数

还原迁移时的ActiveRecord :: IrreversibleMigration异常

我创建了以下Active Record Migration,它添加和删除了一些索引.

class FixIndexes < ActiveRecord::Migration
  def change
    add_index :table1, :field1, :unique => true

    remove_index :table2, :name => "index_table2_on_field1"
    remove_index :table2, :name => "index_table2_on_field2"

    remove_index :table3, :name => "index_table3_on_field1"
    add_index :table3, [:field1, :field2]
  end
end
Run Code Online (Sandbox Code Playgroud)

当我运行migration($ bundle exec rake db:migrate)时,它按预期正常工作.

不幸的是,当我尝试恢复迁移($ bundle exec rake db:rollback)时,它不起作用并引发ActiveRecord::IrreversibleMigration异常

==  FixIndexes: reverting =====================================================
rake aborted!
An error has occurred, all later migrations canceled:

ActiveRecord::IrreversibleMigration/usr/local/rvm/gems/ruby-1.9.3-p392/gems/activerecord-3.2.14/lib/active_record/migration/command_recorder.rb:42:in `block in inverse'
/usr/local/rvm/gems/ruby-1.9.3-p392/gems/activerecord-3.2.14/lib/active_record/migration/command_recorder.rb:40:in `map'
Run Code Online (Sandbox Code Playgroud)

我的问题是:

  1. 为什么这是不可逆转的迁移?它只是添加和删除一些索引,而不是数据.
  2. 如果我使用def self.updef self.down …

mysql activerecord ruby-on-rails rails-migrations ruby-on-rails-3

3
推荐指数
1
解决办法
2526
查看次数

如何从项目中删除丢失的迁移?

所以我犯了从我的项目中手动删除迁移文件的愚蠢错误。

他们还在露面db:migrate:status,但我不能够rollback或者destroy他们没有与MigrationID_somename创建新的空文件,然后运行摧毁这些占位符文件。

有没有更好的方法来忘记丢失的迁移文件?

me$ rake db:migrate:status

database: [...]/db/development.sqlite3

 Status   Migration ID    Migration Name
--------------------------------------------------
   up     20141203044050  ********** NO FILE **********
   up     20141203044501  ********** NO FILE **********

me$ rake db:migrate:down VERSION=20141203044501
rake aborted!
ActiveRecord::UnknownMigrationVersionError: 

No migration with version number 20141203044501

/Library/Ruby/Gems/2.0.0/gems/activerecord-4.1.6/lib/active_record/migration.rb:932:in `run'
/Library/Ruby/Gems/2.0.0/gems/activerecord-4.1.6/lib/active_record/migration.rb:818:in `run'
/Library/Ruby/Gems/2.0.0/gems/activerecord-4.1.6/lib/active_record/railties/databases.rake:79:in `block (3 levels) in <top (required)>'
Tasks: TOP => db:migrate:down
(See full trace by running task with --trace)
Run Code Online (Sandbox Code Playgroud)

rails-migrations ruby-on-rails-4

3
推荐指数
1
解决办法
981
查看次数

在Rails中为同一个模型列建立两个关联

我对rails非常陌生.我正在尝试在Rails中建立与另一个模型的关联.

我有一个带有列的用户模型:id,user_name,email

现在我正在尝试创建另一个与用户模型关联的模型Expense.此模型的目的是创建费用并将费用与来自同一模型用户的两个不同用户相关联.与第二个用户的关联是在两个用户之间拆分金额.

这是我打算在创建模型费用时要做的事情:

$ rails generate model Expense amount:decimal user:references split_with:references
Run Code Online (Sandbox Code Playgroud)

现在我如何将split_with与User模型相关联,因为两个引用都关联到同一个User模型的两个用户的id?

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

3
推荐指数
1
解决办法
690
查看次数

使用 postgresql 在 Rails 4 上恢复自动递增 id

我需要将一些数据从旧网站迁移到新的 Rails 网站。我需要保留我的城市 ID,因此我创建了表,并将 id 设置为 false 并手动创建该列:

create_table "cities", id: false, force: true do |t|
   t.integer  "id", null: false
   t.string   "name", null: false
   t.datetime "created_at"
   t.datetime "updated_at"
   t.boolean  "is_active",  default: true, null: false
   t.string   "code_che"
end

add_index "cities", ["id"], name: "index_cities_on_id", unique: true, using: :btree
Run Code Online (Sandbox Code Playgroud)

完成迁移后,我希望能够创建新城市,例如 City.create(name: 'My big city') 但出现下一个错误:

ActiveRecord::StatementInvalid: PG::NotNullViolation: ERROR:  null value in column "id" violates not-null constraint
Run Code Online (Sandbox Code Playgroud)

显然我犯了一个错误,你能帮我找出哪里吗?我正在使用 Rails 4 和 postgresql gem。

谢谢。

postgresql ruby-on-rails rails-migrations

3
推荐指数
1
解决办法
3221
查看次数

如何恢复已签入到 git 的 Rails 迁移

在我的development/feature分支上,我有一个提交20150818113106_add_team_id_to_account.rb(将一列添加到Account)&schema.rb应用迁移的结果。此提交已被推送,& 也存在于origin/development/feature.

现在我想恢复此更改 -Account毕竟我不想添加此列。我不知道我是否应该因此恢复 git 提交,或者运行db:migrate:down& 提交结果,或者两者兼而有之。

git ruby-on-rails rails-migrations

3
推荐指数
1
解决办法
2938
查看次数

使用 uuid-ossp 将 Rails 中的模型 id 更改为 uuid

我需要将现有模型的 id 更改为 uuid。我正在使用本指南:

http://rny.io/rails/postgresql/2013/07/27/use-uuids-in-rails-4-with-postgresql.html

但不知道如何使下面的迁移适应变化(而不是创建新的迁移):

 class CreateDocuments < ActiveRecord::Migration
  def change
   create_table :documents, id: :uuid  do |t|
      t.string :title
      t.string :author
      t.timestamps
    end
  end
end
Run Code Online (Sandbox Code Playgroud)

uuid ruby-on-rails rails-migrations

3
推荐指数
1
解决办法
3629
查看次数

如何在 Heroku 上自动运行 Rails 迁移

我有 10 多个不同的 Ruby on Rails 应用程序,我必须在其中部署相同的代码。我已将 git repo 连接到我的 Heroku 应用程序,因此每当我推送新更改时,它都会在所有应用程序上部署。

问题在于数据库迁移步骤。我想在每次部署后自动运行迁移。自定义构建包都不起作用。有人可以帮帮我吗?我正在使用 rails 4 和狂欢。

到目前为止,我已经尝试过:

  1. https://github.com/heroku/heroku-buildpack-ruby.git
  2. https://github.com/gunpowderlabs/buildpack-ruby-db-migrate.git

此解决方案不起作用。

是否有其他解决方案可以在 Heroku 上自动运行 Rails 迁移?

ruby migration ruby-on-rails heroku rails-migrations

3
推荐指数
1
解决办法
822
查看次数

重新排序/更改迁移文件上的时间戳

我的一个迁移文件正在引用另一个表/模型,该表/模型将在迁移序列中进一步创建。

Postgres 不喜欢这样:

PG::UndefinedTable:错误:关系“用户”不存在

所以我想知道手动重新排序迁移文件(通过发明新的时间戳/前缀)是否存在任何潜在问题?

受影响的表已经向下迁移。

postgresql ruby-on-rails rails-migrations ruby-on-rails-5

3
推荐指数
1
解决办法
3249
查看次数