ActiveRecord不会创建表

时间:2013-02-18 08:58:28

标签: ruby-on-rails ruby rails-activerecord rails-migrations

我正在尝试在非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文件中指定的那个。有什么想法吗?

2 个答案:

答案 0 :(得分:1)

我的问题的解决方案非常明显,我很惭愧我在这里问了一个问题。我所要做的就是在config.yml中设置数据库文件的绝对路径。

答案 1 :(得分:0)

嗯..我怀疑命名的东西可能是个问题。 Rails使用'magic'从ActiveRecord类派生表名。

您是否可以使用:describe tables或数据存储的等效项来显示数据库在数据库中的实际命名方式?