【发布时间】:2016-03-11 00:11:53
【问题描述】:
这是一个使用 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 版本?
【问题讨论】:
标签: ruby-on-rails activerecord ruby-on-rails-5