标签: rails-migrations

rails中的迁移回滚

嘿伙计们我只想撤消一个迁移文件,比如说

rake db:rollback VERSION = $ TIMESTAMP

这个命令不起作用,有什么建议吗?

ruby-on-rails rails-migrations

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

什么是相应的回滚?

我有以下ActiveRecord迁移:

class CreateSubjects < ActiveRecord::Migration
  def self.up
    create_table :subjects do |t|
      t.string :title
      t.timestamps
    end

    change_table :projects do |t|
      t.references :subjects
    end
  end

  def self.down
    drop_table :subjects
    remove_column :projects, :subjects_id #defeats the purpose of having references
  end
end
Run Code Online (Sandbox Code Playgroud)

我其实喜欢这种references风格.不幸的是我找不到referencesself.down部分中的回滚等价物.如果我写,remove_column :projects, :subjects_id我也可以写t.integer :subjects_id,这将使它更安全.

ruby activerecord ruby-on-rails rails-migrations

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

Rails 3迁移:boolean(mysql vs postgreSQL)

我正在尝试在论坛主题上添加"粘性"选项.这就是我的迁移方式

  def self.up
    add_column :topics, :sticky, :boolean, :null => false, :default => false
  end

  def self.down
    remove_column :topics, :sticky
  end
Run Code Online (Sandbox Code Playgroud)

这在mysql上本地完美,但当我将更改推送到heroku(使用PostgreSQL)时,这是我在使用控制台时得到的

>> t.sticky
=> "f"
>> t.sticky.class
=> String
>> t.sticky = true
=> true
>> t.sticky.class
=> TrueClass
Run Code Online (Sandbox Code Playgroud)

为什么此属性的默认值为String?

编辑:如果我保存对象,它不会改变粘性属性,即它仍然是"f".

postgresql ruby-on-rails heroku rails-migrations ruby-on-rails-3

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

Rails通过现有数据库进行迁移

我正在创建一个新的Rails 3.1应用程序.我希望这个新应用程序重用现有数据库(由以前的rails 2应用程序创建).

我创建了定义模型的新应用程序,它重用了数据库中的一些现有数据.

在开发和测试阶段,一切正常,因为它在一个干净的工作表数据库上运行,但在尝试部署到生产时,我得到的消息如下:

PGError: ERROR:  column "email" of relation "users" already exists
*** [err :: localhost] : ALTER TABLE "users" ADD COLUMN "email" character varying(255) DEFAULT '' NOT NULL
Run Code Online (Sandbox Code Playgroud)

但是我在迁移中的想法就像

class DeviseCreateUsers < ActiveRecord::Migration
  def change
    change_table(:users) do |t|
      t.database_authenticatable :null => false
      t.recoverable
      t.rememberable
      t.trackable
      t.timestamps
    end
end
Run Code Online (Sandbox Code Playgroud)

如何使db:migrate忽略已存在的内容并仅更改新内容和/或新类型?

我在stackoverflow上看到了类似的问题,但没有人回答这个问题.谢谢你的回答.

ruby database postgresql ruby-on-rails rails-migrations

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

Rails BLOB/TEXT列在密钥规范中使用,没有密钥长度

我正在尝试运行rails迁移,我看到错误"密钥规范中使用的BLOB/TEXT列没有密钥长度"......但是,我在迁移类中指定了长度.从迁移生成SQL语句时,Rails似乎忽略了这一点.有线索吗?

这是我的迁移类:

class AddIndexToAccounts < ActiveRecord::Migration
def self.up
  add_index :TACCOUNT, :NAMEX, :length => 5
end
def self.down
  remove_index :TACCOUNT, :NAMEX
end
end
Run Code Online (Sandbox Code Playgroud)

这是错误输出.它似乎已经看到了长度规范,但它在它生成的SQL语句中不存在:

** [out :: 192.168.10.7] -- add_index(:TACCOUNT, :NAMEX, {:length=>5})
** [out :: 192.168.10.7] rake aborted!
** [out :: 192.168.10.7] An error has occurred, all later migrations canceled:
** [out :: 192.168.10.7] 
** [out :: 192.168.10.7] Mysql::Error: BLOB/TEXT column 'NAMEX' used in key specification without a key length: CREATE  INDEX `index_TACCOUNT_on_NAMEX` ON `TACCOUNT` (`NAMEX`)
Run Code Online (Sandbox Code Playgroud)

mysql ruby-on-rails rails-migrations

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

尝试使用rake db:structure:load加载结构时出错,"schema_migration"不存在

我正在运行rake db:structure:load但是在加载所有结构后,它无法在schema_migrations中插入版本.

看起来PostgreSQL不知道最近创建的表.已经谷歌搜索,但没有找到任何有用的东西.

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

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

删除模型和迁移文件rails 4

我试图在我的rails博客中添加标记模型.但是我意外地生成了一个"Tags.rb"模型而不是"Tag.rb",在阅读了指南之后,我意识到制作"标签"复数在模型方面是个错误.我使用了回滚迁移

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

然后

  rails destroy model Tags.rb 
Run Code Online (Sandbox Code Playgroud)

这就是我回来的原因

  invoke  active_record
  remove    /home/migration/templates/create_table_migration.rb
  remove    app/models/tags.rb.rb
  invoke    test_unit
  remove      test/models/tags.rb_test.rb
  remove      test/fixtures/tags.rbs.yml
Run Code Online (Sandbox Code Playgroud)

当我回到模型文件夹,虽然它仍然存在.请帮忙 :)

ruby-on-rails rails-migrations

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

MiniTest中的undefined方法`link_to_remote'用于application_helper测试

将应用程序从Rails 2.3.17迁移到3.2.21时..link_to_remote在使用MiniTest进行测试时,我们遇到了Rails遗留表单帮助程序的问题.

在旧版本的rails中,我们使用了在Rails 3中删除的link_to_remote表单助手.为了提供支持,我们在我们的应用程序中添加了prototype_legacy_helper插件,该插件在UI中运行良好,但测试失败并抛出错误,如下所示:

NoMethodError: undefined method `link_to_remote' for #<ApplicationHelperTest:0xc800dd4>
Run Code Online (Sandbox Code Playgroud)

这是我们在ApplicationHelper中的代码

def reservation_menu_command_link(command, *args)
  ...
  command_link = link_to_remote(anchor_text,options = {}, {:class => style_class})
  ...
end
Run Code Online (Sandbox Code Playgroud)

这是我们对application_helper测试的测试用例

def test_reservation_menu_command_link
  options = { :lodging_view => lv}
  assert_equal(%q{xyz}, reservation_menu_command_link(:cancel_all_possible, options))
end
Run Code Online (Sandbox Code Playgroud)

所以你可以看到我们有一个方法reservation_menu_command_link,我们在我们的UI中使用它,工作正常,但测试此定义失败.

任何人都可以帮助我摆脱插件的这种行为吗?

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

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

Rails4迁移-向add_reference方法添加null:false吗?

我刚刚开始学习rails,如果对此的答案很明显,那么我感到抱歉。

我在我的应用程序中添加了帖子和类别表的迁移,现在使用以下行在默认值不为null的情况下添加对帖子表中类别的引用:

add_reference :posts, :category, index: true, foreign_key: true, null: false
Run Code Online (Sandbox Code Playgroud)

但是在运行迁移时出现以下错误:

SQLite3::SQLException: Cannot add a NOT NULL column with default value NULL: ALTER TABLE "posts" ADD "category_id" integer NOT NULL
Run Code Online (Sandbox Code Playgroud)

我曾尝试阅读过api,但无法弄清楚我在做什么错。

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

5
推荐指数
2
解决办法
7869
查看次数

Rails的旧迁移由于新列模型的验证而失败

我有一个使用活动管理员进行生产设计的应用程序。我尝试添加user_role到表中admin_users。我还想验证在创建新的管理员用户时是否选择了角色名称。所以我添加validates :role_id, :presence => true了Rails模型。

当我在旧数据库上运行新迁移时,一切正常。但是,当我尝试从头开始应用迁移时,由于模型中添加了验证,导致未定义的方法错误,导致创建admin用户的旧迁移失败。

从UI创建管理员用户时,无需更改旧的迁移,也无需进行验证,是否有可能克服这种情况

ruby-on-rails rails-migrations

5
推荐指数
2
解决办法
333
查看次数