标签: rails-migrations

如何在一个表中添加对同一模型的多个引用的迁移?的Ruby/Rails

如何使用引用同一个表的两个字段创建迁移?我有表A和图像.A.image1_id将参考图像,而A.image2_id也将参考图像.只有2张图片,而不是很多.如果我使用

class AddFields < ActiveRecord::Migration
   def change
    change_table(:ticket) do |t|
        t.references :image1_id
        t.references :image2_id
    end
  end
end
Run Code Online (Sandbox Code Playgroud)

我认为这不会起作用,因为它会在最后添加另一个_id,并且可能不会知道使用'image'模型.我也想过

change_table(:ticket) do |t|
    t.references :image
Run Code Online (Sandbox Code Playgroud)

但是,我该如何添加其中两个呢?我还考虑过添加

create_table :images do |t|
  t.belongs_to :ticket
  t.string :file
Run Code Online (Sandbox Code Playgroud)

但我只想要2,而不是很多,这似乎不允许从票证中获取图像,如ticket.image1ticket.image2.

根据这个文档http://apidock.com/rails/v3.2.8/ActiveRecord/ConnectionAdapters/SchemaStatements/change_table这是我能找到的全部内容,t.references似乎也没有任何参数.

change_table(:suppliers) do |t|
  t.references :company
end
Run Code Online (Sandbox Code Playgroud)

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

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

管理mongoid迁移

有人能给我一个简短的介绍,使用Mongoid在Rails中进行数据库迁移吗?我对每个文档迁移的懒惰特别感兴趣.这意味着,无论何时从数据库中读取文档,都要将其迁移到最新版本并再次保存.

有没有人以前做过这种事情?我遇到过mongoid_rails_migrations,但它没有提供任何类型的文档,虽然它看起来像这样做,但我真的不确定如何使用它.

我应该指出,我只是在概念上熟悉ActiveRecord迁移.

ruby-on-rails database-migration rails-migrations mongoid

25
推荐指数
2
解决办法
8266
查看次数

Rails迁移不会更改schema.rb

我有一个rails应用程序没有应用到我的schema.rb.迁移应该创建一个表:

class CreateUserGraphs < ActiveRecord::Migration
  def change
    create_table :user_graphs do |t|
      t.string :name
      t.string :content
      t.integer :user_id
      t.string :type_id
      t.integer :upload_id

      t.timestamps
    end

    add_index :user_graphs, [:user_id, :created_at]
  end
end
Run Code Online (Sandbox Code Playgroud)

我做db:reset.然后我尝试了rake db:migrate:up VERSION = 123123123(这是迁移#).我在"开发"环境中.

为什么迁移不会影响schema.rb?

ruby-on-rails database-migration rails-migrations ruby-on-rails-4

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

从Rails迁移中删除默认值

我发现了几个关于编辑迁移的类似问题,但无法解决这个问题.我进行了rails迁移,然后打开了迁移文件并在该字段中添加了默认值选项.然后运行rake db:migrate.默认值按预期填充.然后稍后进行一些迁移,我决定要删除默认值选项.我怎么做?

如果这是我最后一次迁移,我会使用db:rollback并重新创建,但由于之前完成了一些迁移,我不知道如何解决这个问题.

感谢帮助.

rails-migrations ruby-on-rails-4

24
推荐指数
2
解决办法
8728
查看次数

如何从Rails中的数据库列中删除唯一约束?

我使用以下迁移创建了一个表:

class CreateProfilePictures < ActiveRecord::Migration
  def change
    create_table :profile_pictures do |t|
      t.integer :user_id, null: false
      t.integer :picture_id, null: false
      t.timestamps null: false
    end

    add_index :profile_pictures, :user_id, unique: true
    add_index :profile_pictures, :picture_id, unique: true
  end
end
Run Code Online (Sandbox Code Playgroud)

我尝试使用以下内容删除约束:

class FixProfilePic < ActiveRecord::Migration
  def change
    change_column :profile_pictures, :picture_id, :integer, unique: false
  end
end
Run Code Online (Sandbox Code Playgroud)

如果我尝试在多个地方使用相同的picture_id,我仍然会遇到唯一的约束违规错误.从picture_id中删除唯一性约束的正确方法是什么?

sql ruby-on-rails rails-migrations

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

Rails 3.1:无法在添加它的同一个迁移中写入列

我有一个可以正常运行的add_column迁移.但是,在运行它并启动控制台后,我会发现first_name和last_name列完全为空.我尝试使用save!而且它具有相同的效果 - 没有报告错误.这是原始的:

class UserAddFirstNameAndLastName < ActiveRecord::Migration
  def change
    # add column first name, last name string
    add_column :users, :first_name, :string
    add_column :users, :last_name, :string

    User.all.each do |u|
      u.first_name = 'first name'
      u.last_name = 'last name'
      u.save
    end
  end
end
Run Code Online (Sandbox Code Playgroud)

我还认为这可能是一些类加载问题,所以我插入行User以强制用户类在循环之前重新加载.没有骰子.

当我将其拆分为两次迁移时,实现了期望的效果.有人对此有解释吗?我发誓我甚至在过去迁移的同一个项目中做过这个.

其他说明:设计用户引擎,attr_accessible在运行迁移之前将新列添加到User类中.

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

23
推荐指数
1
解决办法
4927
查看次数

如何在创建迁移时将默认值设置为rails中的列

我是模拟导轨的新手.我知道如何创建模型以及如何向其添加列.现在我想将默认值设置为列,但我没有得到我究竟能做到的.

我生成了新模型

rails g model User
Run Code Online (Sandbox Code Playgroud)

然后在其中添加了列

rails generate migration AddNotificationEmailToUsers notification_email:boolean
Run Code Online (Sandbox Code Playgroud)

现在我想将Notification列的值默认设置为true.请指导我如何编写相同的迁移.谢谢!!!

activerecord rails-migrations ruby-on-rails-3

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

Ruby on Rails上"预期字符串默认值为..."的含义

最近我在Rails(5.0.0.1)上为Ruby(2.3.3)创建了一个应用程序:

$ rails _5.0.0.1_ new myapp --database=postgresql -T
Run Code Online (Sandbox Code Playgroud)

设置Gemfile并测试与我的数据库的连接后:

$ rails db:migrate
Run Code Online (Sandbox Code Playgroud)

我试图生成模型,但我收到了奇怪的消息:

$ rails g model Competition title:string
Expected string default value for '--test-framework'; got false (boolean)
Expected string default value for '--jbuilder'; got true (boolean)
Expected string default value for '--test-framework'; got false (boolean)
      invoke  active_record
      create    db/migrate/20161206021603_create_competitions.rb
      create    app/models/competition.rb
Run Code Online (Sandbox Code Playgroud)

这些消息的含义是什么?"预期的字符串默认值为......"

提前致谢.

更新:我的Gemfile

source 'https://rubygems.org'

ruby '2.3.3'

gem 'rails', '~> 5.0.0', '>= 5.0.0.1'
gem 'pg', '~> 0.18'
gem 'puma', '~> 3.0'
gem 'sass-rails', '~> 5.0' …
Run Code Online (Sandbox Code Playgroud)

ruby-on-rails rails-migrations

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

当推送到Heroku时,Rails迁移错误w/Postgres

我正在尝试执行以下向上迁移以更改"tweet"模型表中的"number"列

class ChangeDataTypeForTweetsNumber < ActiveRecord::Migration
  def up
    change_column :tweets do |t|
      t.change :number, :integer
    end
  end

  def down
    change_table :tweets do |t|
      t.change :number, :string
    end
  end
end
Run Code Online (Sandbox Code Playgroud)

执行以下向上迁移到heroku ....

heroku rake db:migrate:up VERSION=20120925211232
Run Code Online (Sandbox Code Playgroud)

我收到以下错误

    PG::Error: ERROR:  column "number" cannot be cast to type integer
: ALTER TABLE "tweets" ALTER COLUMN "number" TYPE integer
Run Code Online (Sandbox Code Playgroud)

任何想法都会非常感激.

感谢大家.

postgresql ruby-on-rails heroku rails-migrations

21
推荐指数
2
解决办法
7411
查看次数

Rails ActiveRecord :: Migration index:true和add_index有什么区别?

有什么区别

t.boolean :is_live, index: true
Run Code Online (Sandbox Code Playgroud)

add_index :table_name, :is_live
Run Code Online (Sandbox Code Playgroud)

如果没有区别,那么为什么只能add_index在schema.rb中反映出来.当我使用时index: true,我实际上无法看到索引schema.rb.我应该只使用这种add_index方法.

使用该add_index方法时,我可以在schema.rb中看到这一点

add_index "table_name", ["is_live"], name: "index_table_name_on_is_live", using: :blahblah
Run Code Online (Sandbox Code Playgroud)

migration activerecord rails-migrations

20
推荐指数
2
解决办法
6832
查看次数