标签: rails-migrations

如何将新种子数据添加到现有rails数据库

我正在开发一个已部署到某些测试和登台系统以及各种开发人员工作站的应用程序.我需要添加一些额外的参考数据,但我不知道如何添加它.

大多数建议说使用seed.rb,但我的理解是,这只在应用程序初始部署时运行一次.由于我们不想重建测试和暂存数据库,以便我们可以添加1行参考数据,是否有另一种方法来添加数据?

我正在考虑使用db迁移,这是正确的方法吗?

谢谢

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

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

Ruby on Rails:向现有数据库添加列

我收到一个错误:

SQLite3::SQLException: no such column: ideas.list_id: 
SELECT "ideas".* FROM "ideas"  
WHERE "ideas"."list_id" = 2
Run Code Online (Sandbox Code Playgroud)

但我补充道

t.integer :list_id

到我的数据库迁移文件:

class CreateIdeas < ActiveRecord::Migration
  def change
    create_table :ideas do |t|
      t.string :name
      t.text :description
      t.string :picture

      t.timestamps
    end
    add_foreign_key :ideas, :lists
  end
end
Run Code Online (Sandbox Code Playgroud)

这给了我这个:

class CreateIdeas < ActiveRecord::Migration
  def change
    create_table :ideas do |t|
      t.string :name
      t.text :description
      t.string :picture
      t.integer :list_id
      t.timestamps
    end
    add_foreign_key :ideas, :lists
  end
end
Run Code Online (Sandbox Code Playgroud)

然后我输入

rake db:migrate
Run Code Online (Sandbox Code Playgroud)

知道为什么我会收到一个错误,说没有列?我还是RoR的新人.我是否必须以其他方式添加列?

谢谢

ruby migration ruby-on-rails rails-migrations ruby-on-rails-3

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

在Rails中销毁/删除数据库

是否可以从现有应用程序中完全删除数据库和所有迁移记录等,以便我可以从头开始重新设计数据库?

database sqlite activerecord rails-migrations ruby-on-rails-3

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

Rails 4:schema.db显示"无法转储表"事件"因为对于nil遵循NoMethodError #undefined方法`[]':NilClass"

我一直在研究一个带有sqlite(Rails开发环境的默认设置)的Rails 4.0应用程序,用于事件(黑客马拉松),它有一个父模型,Event,可以有很多Press_Blurbs.

首先,我运行了一些脚手架生成器,这些生成器创建了一些我看似没有问题的迁移:

class CreateEvents < ActiveRecord::Migration
  def change
    create_table :events do |t|
      t.string :city
      t.string :theme
      t.datetime :hackathon_start
      t.datetime :hackathon_end
      t.datetime :show_start
      t.datetime :show_end
      t.text :about
      t.string :hack_rsvp_url
      t.string :show_rsvp_url

      t.timestamps
    end
  end
end

class CreatePressBlurbs < ActiveRecord::Migration
  def change
    create_table :press_blurbs do |t|
      t.string :headline
      t.string :source_name
      t.string :source_url
      t.string :logo_uri

      t.timestamps
    end
  end
end
Run Code Online (Sandbox Code Playgroud)

然后我为模型添加了一些关系:

class Event < ActiveRecord::Base
  has_many :press_blurbs
end

class PressBlurb < ActiveRecord::Base
  belongs_to :event
end
Run Code Online (Sandbox Code Playgroud)

...并添加/运行迁移以添加表引用:

class AddEventRefToPressBlurbs < ActiveRecord::Migration
  def change
    add_column …
Run Code Online (Sandbox Code Playgroud)

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

19
推荐指数
1
解决办法
5602
查看次数

Rails迁移使用转换将字符串转换为整数

有一个很好的问题,在这里我想阐述一下.我试图将我的数据库中的列转换为字符串为整数.

我认为转换将是非常直接的转发.目前我的字符串是

["10", "12", "125", "135", "140", ...]
Run Code Online (Sandbox Code Playgroud)

我的迁移文件包括:

def change
    change_column :table_name, :product_code, :integer
end
Run Code Online (Sandbox Code Playgroud)

Rails尝试这个,但Postgresql回复了一个错误.

PG ::错误:错误:列"product_code"无法自动转换为类型integer
HINT:指定USING表达式以执行转换.

我不确定如何在rails迁移中使用这个'USING'表达式.

所以我认为转换非常简单.我应该使用什么作为USING表达式?

postgresql rails-migrations ruby-on-rails-4

19
推荐指数
2
解决办法
6399
查看次数

如何将序列添加到迁移并在模型中使用它们?

我想要一个Customer带有普通主键的模型和另一个用于存储自定义"客户编号"的列.另外,我希望db能够处理默认的客户编号.我认为,定义序列是最好的方法.我使用PostgreSQL.看看我的迁移:

class CreateAccountsCustomers < ActiveRecord::Migration
  def up

    say "Creating sequenze for customer number starting at 1002"
    execute 'CREATE SEQUENCE customer_no_seq START 1002;'

    create_table :accounts_customers do |t|
      t.string :type
      t.integer :customer_no, :unique => true
      t.integer :salutation, :limit => 1
      t.string :cp_name_1
      t.string :cp_name_2
      t.string :cp_name_3
      t.string :cp_name_4
      t.string :name_first, :limit => 55
      t.string :name_last, :limit => 55
      t.timestamps
    end

    say "Adding NEXTVAL('customer_no_seq') to column cust_id"
    execute "ALTER TABLE accounts_customers ALTER COLUMN customer_no SET DEFAULT NEXTVAL('customer_no_seq');"

  end

  def down
    drop_table …
Run Code Online (Sandbox Code Playgroud)

ruby-on-rails rails-models rails-migrations rails-postgresql ruby-on-rails-3.1

18
推荐指数
1
解决办法
6646
查看次数

Rails 4.将表id迁移到UUID

我有一个表: db/migrate/20140731201801_create_voc_brands.rb:

class CreateVocBrands < ActiveRecord::Migration
  def change
    create_table :voc_brands do |t|
      t.string :name

      t.timestamps
    end
  end
end
Run Code Online (Sandbox Code Playgroud)

但我需要将表更改为此(如果我将从零创建它):

class CreateVocBrands < ActiveRecord::Migration
  def change
    create_table :voc_brands, :id => false do |t|
      t.uuid :id, :primary_key => true
      t.string :name

      t.timestamps
    end
    add_index :voc_brands, :id
  end
end
Run Code Online (Sandbox Code Playgroud)

如何使用迁移更改此设置?

migration ruby-on-rails rails-migrations

18
推荐指数
2
解决办法
9902
查看次数

什么是"循环参数引用"错误,使用activesupport time_zone?

我是ruby on rails的新手,我正在尝试创建一个教程.我执行时遇到问题rake db:migrate.

hugo@ubuntu:~/pin_board$ rake db:migrate
/home/hugo/.rvm/gems/ruby-2.2.2/gems/activesupport-4.0.5/lib/active_support/values/time_zone.rb:283: warning: circular argument reference - now
Run Code Online (Sandbox Code Playgroud)

是什么导致这个?
有人能帮助我吗?

ruby rubygems ruby-on-rails rails-migrations

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

change_column_default的可逆迁移在Rails中没有任何默认值

Rails的指南,活动记录迁移说,你可以做

change_column_default :products, :approved, from: true, to: false
Run Code Online (Sandbox Code Playgroud)

change在Rails中有一个方法,类似于以下内容:

change_column_default :people, :height, from: nil, to: 0
Run Code Online (Sandbox Code Playgroud)

意图从没有任何默认值,到默认值为零.

但是,当我尝试回滚时,我得到了

ActiveRecord::IrreversibleMigration: ActiveRecord::IrreversibleMigration
Run Code Online (Sandbox Code Playgroud)

考虑到我给Rails中fromto,为什么没有接受它?

我正在使用Rails 4.2.0.

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

18
推荐指数
2
解决办法
9660
查看次数

如何使用不同的表名在rails迁移中添加外键

如何通过添加外键来指定不同的表名.例如

我有一个像这样的模特

class MyPost < ActiveRecord::Base
  has_many :comments, class_name: PostComment
end

class PostComment < ActiveRecord::Base
  belongs_to :post, class_name: MyPost
end
Run Code Online (Sandbox Code Playgroud)

现在我想改变我的迁移文件,如下所示:

class CreatePostComments < ActiveRecord::Migration
  def change
    create_table :post_comments do |t|
     t.belongs_to :post, index: true
     t.timestamps null: false
    end
    add_foreign_key :post, :class_name => MyPost
  end
end 
Run Code Online (Sandbox Code Playgroud)

但它没有用.迁移正在取消.如何更改我的迁移文件以使用我的模型结构.

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

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