【问题标题】:ActiveRecord doesn't create tablesActiveRecord 不创建表
【发布时间】:2013-02-18 08:58:27
【问题描述】:

我正在尝试在非 Rails 项目中使用 ActiveRecord 和 rails 迁移。我安装了standalone_migrations gem,它似乎可以工作。为了测试,我创建了两个迁移

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 文件中指定的那个。任何想法为什么?

【问题讨论】:

  • 您使用的是哪种数据库类型(sqlite、mysql..)?如果表存在,您可以在数据库级别进行验证吗?您可能在一个数据库中创建表并连接到另一个数据库。
  • 粘贴你的 database.yml 文件
  • 嗯.. 我怀疑命名可能有问题。

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


【解决方案1】:

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

【讨论】:

  • 不要为此感到羞耻...但是您可以通过更正来编辑您的问题吗?它可能对其他有类似问题的人有用。
  • 我在下面回答了我的问题,我打算让我的答案被接受,但我必须等待两天。
【解决方案2】:

嗯.. 我怀疑命名可能有问题。 Rails 使用“魔术”从 ActiveRecord 类中派生表名。

您能否使用describe tables 或您的数据存储的等效名称来说明您的表在数据库中的实际命名方式?

【讨论】:

    猜你喜欢
    • 2021-04-15
    • 1970-01-01
    • 1970-01-01
    • 2011-09-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多