标签: rails-migrations

将默认值添加到另一列的迁移中

由于updated_at列在更新时查看所有属性,我想添加一个new_updated_at,我将在更新时决定.

通过迁移插入时的默认值我希望它是当前的updated_at.

如何将迁移的默认值设置为同一行但另一列的值?

postgresql ruby-on-rails default-value rails-migrations ruby-on-rails-3

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

Rails g 迁移走新路线,什么也不做

$ rails generate migration add_password_digest_to_users password_digest:string
Run Code Online (Sandbox Code Playgroud)

必须向用户添加password_digest,但rails生成命令不起作用。它只是假装有效,但似乎会永远持续下去。没有返回错误或回溯,只是换行。

ruby-on-rails rails-migrations rails-generate

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

limit:schema.rb布尔字段中的1个差异

我最近开始注意到在部署到生产之后,我在db/schema.rb那里看到了这个git diff :

-    t.boolean  "published",          limit: 1
+    t.boolean  "published"
Run Code Online (Sandbox Code Playgroud)

-    t.boolean  "visible",            limit: 1,                    default: false
+    t.boolean  "visible",                                         default: false
Run Code Online (Sandbox Code Playgroud)

鉴于Rails版本在两种环境中都是相同的,这是否仅仅是由MySQL版本之间的差异造成的,分别是5.5.43的生产和5.6.23的开发?

mysql git ruby-on-rails rails-migrations

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

如何在Rails 5.0.0.1中撤消rails db:migrate的操作

迁移数据库时,我犯了一个拼写错误。

我想通过运行生成一个脚手架:

rails generate scaffold Micropost context:text user_id:integer
rails db:migrate
Run Code Online (Sandbox Code Playgroud)

尽管我在运行时遗漏了冒号,但犯了一个错误:

rails generate scaffold Micropost context:text user_id integer
rails db:migrate
Run Code Online (Sandbox Code Playgroud)

我想撤消这次迁移,该怎么做?(我正在使用 Rails 5.0.0.1

当我运行时rails db:migrate,我收到以下错误:

 SQLite3::SQLException: table "microposts" already exists:
Run Code Online (Sandbox Code Playgroud)

当我运行时rails db:migrate:status,我得到以下输出:

 Status   Migration ID    Migration Name  
 up       20161024021157  Create users  
 up       20161024025545  ********** NO FILE **********  
 down     20161024025805  Create microposts  
Run Code Online (Sandbox Code Playgroud)

我尝试使用rails db:migrate:down VERSION=20161024025805. 命令行中没有显示任何消息。然后我就跑了rails db:migrate。错误是一样的。

ruby ruby-on-rails rails-migrations

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

在没有默认值的列上使用 change_column_default 时,'from' 值应该是多少?

这是我的创建表迁移。请注意,我没有提供price.

class CreateProducts < ActiveRecord::Migration[5.0]
  def change
    create_table :products do |t|
      t.string :name
      t.decimal :price, precision: 8, scale: 2

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

现在我想设置一个默认值。根据迁移指南,我应该提供from使其可逆。我应该提供什么价值?

class ChangeProductsPriceDefault < ActiveRecord::Migration[5.0]
  def change
    change_column_default :products, :price, from: 'WHAT_TO_WRITE_HERE?', to: 0
  end
end
Run Code Online (Sandbox Code Playgroud)

ruby-on-rails rails-migrations rails-activerecord

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

运行索引迁移时,Rails 是否索引现有记录?

在 Rails 中向现有列添加索引时:

add_index :users, :some_id
Run Code Online (Sandbox Code Playgroud)

然后运行迁移:

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

是否所有预先存在的记录/列都自动索引?使用的数据库是 Postgres。

ruby postgresql activerecord ruby-on-rails rails-migrations

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

如何在Rails中的子文件夹中组织迁移文件?

有没有办法在db/migrate文件夹中组织迁移文件?

因为你在这个文件夹中很快就有大量的迁移文件,所以有这样的东西会很棒:

  • db/migrate/user_migrations/
    • timestamp_create_users.rb
    • timestamp_create_addresses.rb

等等...

有一个简单的方法吗?某种配置?这是一种不好的做法,我绝对不应该这样做吗?

如果有人有任何关于此的信息,我会很高兴听到!

ruby directory ruby-on-rails rails-migrations

0
推荐指数
1
解决办法
704
查看次数

ActiveModel :: MissingAttributeError:无法写入未知属性`user_id`

我正在尝试实施"评论"功能,作为我正在建设的项目的一部分.

在本课程的早些时候,我们创建了一个评论表,并让Faker gem生成虚假评论.

我的说明如下:

注释必须与用户关联,因此将user_id外键添加到comments表中.记得也要添加一个索引;

更新用户模型,以便您可以调用user.comments和Comment模型,以便您可以调用comment.user;

运行db:reset时,修改seeds.rb文件以创建有效注释;

最初我试图运行我的rails generate命令,但一直遇到这个错误:

? rake db:migrate
== 20150508143445 CreateComments: migrating ===================================
-- create_table(:comments)
rake aborted!
StandardError: An error has occurred, this and all later migrations canceled:

SQLite3::SQLException: table "comments" already exists: CREATE TABLE "comments" ("id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "description" text, "created_at" datetime NOT NULL, "updated_at" datetime NOT NULL) /Users/jon/code/bloccit/db/migrate/20150508143445_create_comments.rb:3:in `change'
-e:1:in `<main>'
ActiveRecord::StatementInvalid: SQLite3::SQLException: table "comments" already exists: CREATE TABLE "comments" ("id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "description" text, "created_at" …
Run Code Online (Sandbox Code Playgroud)

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

0
推荐指数
1
解决办法
8827
查看次数

将已删除列中的数据移动到Rails迁移中刚刚创建的数据

我有一个表'Invoices',其中包含两个布尔列:

Table name: invoices

id               :integer          not null, primary key
...
sent             :boolean          default(FALSE)
payment_received :boolean          default(FALSE)
Run Code Online (Sandbox Code Playgroud)

这两列定义了发票的状态:

def status
  if sent & payment_received
    :paid
  elsif sent | payment_received
    :sent
  else
    :created
  end
end
Run Code Online (Sandbox Code Playgroud)

有一天,我们决定删除这些布尔列,并在Rails枚举的帮助下创建包含发票状态的新列

status :integer

enum status: [ :created, :sent, :paid ]
Run Code Online (Sandbox Code Playgroud)

所以现在我需要做三件事:

  1. 添加新列"状态"
  2. 计算现有发票的状态,更新状态列
  3. 删除列'sent'和'payment_received'.

我怎样才能做到这一点?我可以在我的本地环境中轻松完成此任务,但我无法理解如何在生产服务器上执行此操作.例如,如果我将创建一个更新我的表的迁移和一个计算状态的rake任务,则迁移首先传递,我的数据将从布尔列中移除,然后才能使用它们.

注意:如果它以某种方式重要:我使用Postgres.

任何帮助表示赞赏!

postgresql activerecord ruby-on-rails rails-migrations

0
推荐指数
1
解决办法
89
查看次数

Ruby on Rails:ratyrate gem表已经存在吗?

我正在使用Rails 5,并且已经安装了gem并尝试运行迁移,但是却出现此错误:

Index name 'index_rates_on_rater_id' on table 'rates' already exists

有人知道为什么会这样吗?这是一个新站点,并且刚刚开始添加devise gem。

这是在执行时无法完成的迁移文件 rails db:migrate

class CreateRates < ActiveRecord::Migration[5.1]

  def self.up
      create_table :rates do |t|
        t.belongs_to :rater
        t.belongs_to :rateable, :polymorphic => true
        t.float :stars, :null => false
        t.string :dimension
        t.timestamps
      end

      add_index :rates, :rater_id
      add_index :rates, [:rateable_id, :rateable_type]
    end

    def self.down
      drop_table :rates
    end

end
Run Code Online (Sandbox Code Playgroud)

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

0
推荐指数
1
解决办法
671
查看次数

使用 Rails 迁移添加新表..?

我想使用 Rails 迁移添加新表:

**table_name** users_location_track
**columns** id (primary key, auto increment serial),
            user_id (reference to users), location_info (string), 
            creation_time(time-stamp)
Run Code Online (Sandbox Code Playgroud)

请建议程序和代码 我是 Rails 新手?

rails-migrations ruby-1.8.7

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