我正在尝试在非rails项目中使用ActiveRecord和rails迁移。我安装了standalone_migrations宝石,它似乎工作。为了测试,我用
创建了两个迁移rake db:new_migration name=users
rake db:new_migration name=logins
以下是我的迁移文件:
class CreateUsers < ActiveRecord::Migration
def self.up
create_table(:users) do |t|
t.string :full_name, :null => false
# Database authenticable
t.string :username, :null => false, :default => '', :unique => true
t.string :encrypted_password, :null => false, :default => ''
end
end
def self.down
drop_table :users
end
end
class CreateLogins < ActiveRecord::Migration
def self.up
create_table :logins do |t|
t.integer :user_id, :null => false
t.datetime :logged_in_at, :null => false
t.datetime :logged_out_at, :null => false
end
end
def self.down
drop_table :logins
end
end
然后我跑了rake db:migrate
,它似乎有效:
== CreateUsers: migrating ====================================================
-- create_table(:users)
-> 0.0020s
== CreateUsers: migrated (0.0020s) ===========================================
== CreateLogins: migrating ===================================================
-- create_table(:logins)
-> 0.0020s
== CreateLogins: migrated (0.0020s) ==========================================
我有一个db/migrate
文件夹和一个db/config.yml
配置,就像standalone_migrations gem手册一样。但是,当我创建用户模型时:
require '../../db/dbconnect'
p ActiveRecord::Base.connection.tables
class User < ActiveRecord::Base
end
User.new
首先,我得到表的空列表,然后是异常
Could not find table 'users' (ActiveRecord::StatementInvalid)
我该怎么做才能让它发挥作用?
编辑1:
我的db/config.yml
:
development:
adapter: sqlite3
database: development.db
encoding: utf8
production:
adapter: sqlite3
database: aquareader.db
encoding: utf8
test: &test
adapter: sqlite3
database: test.db
encoding: utf8
我的db/dbconnect.rb
:
require 'rubygems'
require 'active_record'
require 'yaml'
# read the connection information from the database config file
dbconfig = YAML::load(File.open(File.expand_path(File.dirname(__FILE__) + '/config.yml')))
# connect to the database
ActiveRecord::Base.establish_connection(dbconfig['development'])
编辑2:
我发现我的developement.db
表正在使用正确的表和所有内容创建我的根文件夹中的迁移。但是,当我运行lib/myproject/users.rb
时,它会在项目目录中创建一个development.db
,并且不会使用dbconnect.rb
文件中指定的那个。有什么想法吗?
答案 0 :(得分:1)
我的问题的解决方案非常明显,我很惭愧我在这里问了一个问题。我所要做的就是在config.yml
中设置数据库文件的绝对路径。
答案 1 :(得分:0)
您是否可以使用:describe tables
或数据存储的等效项来显示数据库在数据库中的实际命名方式?