2

Rails 以外のプロジェクトで ActiveRecord と rails migration を使用しようとしています。standalone_migrations gemをインストールしましたが、動作しているようです。テストするために、2つの移行を作成しました

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) ==========================================

standalone_migrations gem マニュアルと同じように、db/migrateフォルダーと構成があります。db/config.ymlただし、ユーザー モデルを作成すると、次のようになります。

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。理由はありますか?

4

2 に答える 2

0

うーん..ネーミングに問題があるのではないかと思います。Railsは「magic」を使用してActiveRecordクラスからテーブル名を取得します。

データベース内でテーブルが実際にどのように命名されているかを、次のように表示できます describe tablesか?またはデータストアに相当しますか?

于 2013-02-18T09:14:33.027 に答える