【问题标题】:How to use exist database?如何使用现有数据库?
【发布时间】:2013-12-10 08:08:32
【问题描述】:

我有一个由 PHP 构建的现有 Web 应用程序。

现在我需要通过 Rails 重建这个应用程序。

我已经在数据库中有以下数据:

--------------------------------------------------
| user_id | user_name         | .....             
--------------------------------------------------
| 1       | david             | .....
--------------------------------------------------
| 2       | jobs              | .....
--------------------------------------------------

我使用以下命令生成用户模型:

rails g model User

然后我手动在用户迁移文件中键入列:

 create_table :users do |t|
      t.string :user_name
      ...
      ...
      t.timestamps
end 

然后我尝试使用以下命令读取数据:

@users = User.first

但是它给我一个错误,它告诉我应该使用 rake db:migrate 来生成表。

所以我认为我应该导出我的数据并使用 rake db:migrate 来构建我的数据库结构,然后导入我的数据。

几张桌子有点麻烦。

但是,实际上我的表太多(大约 54 个),所以我必须手动编写 54 个迁移。

那么,有没有一种简单的方法来使用现有数据库?

顺便说一句,我使用 rails4

【问题讨论】:

    标签: ruby-on-rails


    【解决方案1】:

    你可以把你的表转储到schema.rb:

    rake db:schema:dump
    

    然后将其转换为您的初始迁移 (001_initial_migration.rb):

    class InitialMigration < ActiveRecord::Migration
      def self.up
        # put whole schema.rb here
      end
    
      def self.down
        # drop everything
      end
    end
    

    你不需要写54个迁移,一个大的就够了。

    还有rmre gem,它会尝试为你编写模型。

    【讨论】:

    • 感谢回复,我用的是rails4,迁移文件好像只有change方法,没有updown 方法。 rmre gem 仅支持 Rails3
    【解决方案2】:

    你不必为已存在的表写迁移,只为已存在的表写模型,例如:

    class User < AR
     self.table_name = "users" # your existed table name in db
     # attr_accessible :attrs
     # Associations,remember indicate :foreign_key 
    end
    

    如果要添加新表,照常进行

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-05-06
      • 1970-01-01
      • 2021-12-20
      • 1970-01-01
      • 1970-01-01
      • 2013-02-13
      • 1970-01-01
      相关资源
      最近更新 更多