gpt4 book ai didi

ruby-on-rails - ActiveRecord::Migration 弃用警告 - 要求提供 Rails 版本,但我没有使用 Rails

转载 作者:行者123 更新时间:2023-12-04 00:03:19 25 4
gpt4 key购买 nike

这是一个使用 ActiveRecord 与数据库对话的 Ruby 非 Web 项目。

有一个包含数据库连接代码、迁移和模型的文件。请参阅此处(但没有必要阅读此内容来回答问题)

require 'sqlite3'
require 'active_record'
require 'yaml'
require 'active_support/all'
require 'securerandom'

BasePath = "#{File.dirname(__FILE__)}/.."
DATABASE_FILENAME = "database.sqlite"
DATABASE_PATH = "#{BasePath}/#{DATABASE_FILENAME}"
SQLite3::Database.new(DATABASE_PATH)
ActiveRecord::Base.establish_connection(
adapter: 'sqlite3',
database: DATABASE_PATH
)

class Migrations < ActiveRecord::Migration
def up
create_table :todos do |t|
t.string :content
t.boolean :completed
t.timestamps null: false
end
end
def down
puts "backing up database".red_on_black if File.file?(DATABASE_PATH)
loop { (`cp #{DATABASE_PATH} #{DATABASE_PATH}-#{SecureRandom.urlsafe_base64}.backup`; break) rescue next }
sleep 0.5
drop_table :todos
puts "dropped todos table"
end
end # Migrations

class Todo < ActiveRecord::Base
end

问题是关于这一行:
class Migrations < ActiveRecord::Migration
当我使用 Migrations.migrate(:up) 运行迁移时,我收到弃用警告:
DEPRECATION WARNING: Directly inheriting from ActiveRecord::Migration is deprecated.
Please specify the Rails release the migration was written for:

class Migrations < ActiveRecord::Migration[4.2]

就像它建议我将类定义更改为
  class Migrations < ActiveRecord::Migration[4.2]

然后我不再收到警告。

我想知道是否有人可以解释这样做的目的。

我的应用程序不依赖于任何版本的 Rails。为什么我需要

指定Rails 版本?

最佳答案

因为 Active Record 想知道迁移是在哪个版本中生成的。有时,迁移中的默认值会在 Rails 版本之间发生变化(当我说 Rails 版本时,我指的是 Rails 框架的版本,而不是 Rails 的 gem)。

因此,假设您有一个迁移,例如:

create_table :todos do |t|
t.string :content
end

它是用 Active Record 4.2(因此是 Rails 4.2 版本)生成的。在 Rails 4.2 中,字符串列的默认大小为 4 个字节。
在 Rails 5.0 中,Rails 团队决定将默认大小更改为 8 字节。如果您将 gem 升级到 5.0 回滚此迁移并再次运行,您的数据库将有一个大小为 8 字节的字符串列。

如果您在迁移中指定版本,则无论您使用的是哪个版本的 Active Record,该列将始终以生成它的 Rails 版本中的默认大小生成。在我的示例中,如果您指定 4.2 作为版本,它将始终是一个 4 字节的字符串列。

关于ruby-on-rails - ActiveRecord::Migration 弃用警告 - 要求提供 Rails 版本,但我没有使用 Rails,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35929869/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com