在ruby中迁移模型的问题

时间:2010-04-09 17:12:33

标签: ruby-on-rails models migration

我运行脚本/生成模型查询

在模型中编辑query.rb ..

class Query < ActiveRecord::Base #I even tried Migrations instead of Base
  def sef.up
    create table :queries do|t|
      t.string :name
    end
  end

  def self.down
    drop_table :queries
  end
end

,运行rake db:migrate。

我在db中看到的是:

mysql> desc queries;
+------------+----------+------+-----+---------+----------------+
| Field      | Type     | Null | Key | Default | Extra          |
+------------+----------+------+-----+---------+----------------+
| id         | int(11)  | NO   | PRI | NULL    | auto_increment | 
| created_at | datetime | YES  |     | NULL    |                | 
| updated_at | datetime | YES  |     | NULL    |                | 
+------------+----------+------+-----+---------+----------------+

“名称”字段在哪里?

帮助!干杯!

2 个答案:

答案 0 :(得分:2)

你想要的是script/generate migration your_migration_name

编辑#1

我会更好地解释:

实际上,当您运行script/generate model query时,会创建一些文件,包括models/query.rbdb/migrate/XXX_create_query.rb。要创建queries表,您必须编辑第二个文件(db/migrate/XXX_create_query.rb)并插入您发布的代码:

class CreateQueries < ActiveRecord::Migration
   def self.up
      create_table :queries do |t|
         t.string :name
      end
   end

   def self.down
     drop_table :queries
   end
end

然后运行rake db:migrate

编辑#2

正如雅各布指出的那样,因为你已经运行了rake db:migrate,现在你只需要创建另一个迁移

script/generate migration add_name_column_to_queries_table

修改db/migrate/XXX_add_name_column_to_queries_table.rb文件以插入新的name列,然后再次运行rake db:migrate

答案 1 :(得分:1)

您的数据更改不会出现在您的模型中,而是会进行迁移。运行脚本/生成模型时,除models中的query.rb文件外,您还可以在db/migrations中获取XXX_add_queries.rb文件。这是您需要编辑以添加其他字段的文件。

但是,如果您已经运行了rake db:migrate,那么您需要添加新的迁移以添加新字段(script/generate migration add_name_to_queries),编辑新的迁移文件,然后运行db:migrate试。