【问题标题】:Creating model in rails does not create a corresponding table in mysql在rails中创建模型不会在mysql中创建对应的表
【发布时间】:2013-02-18 20:10:08
【问题描述】:

以前没遇到过,我在rails中生成模型

rails g model Rating ratings:integer

此时没有生成迁移文件

然后我跑

 rake db:migrate

此时什么都没有发生,即使 myapp_development 和 myapp_test 存在,模型也没有写入表

所以我检查了mysql,只用了登录

mysql 

它直接登录,那里没有数据库,然后我再次登录,但这次使用这个命令

mysql -u root

我的数据库就在这里。有谁知道这里发生了什么以及如何让我的模型创建相应的表?

数据库.yml

development:
adapter: mysql2
encoding: utf8
reconnect: false
database: recipes_development
pool: 5
username: root
password:

谢谢

【问题讨论】:

  • 当你只输入mysql时,这将使用你当前的用户登录。但是,如果你使用 -u root,它将使用 root 用户(就像在你的 database.yml 中一样)。
  • 所以这与我的问题无关?
  • 只要Rails能连接数据库,我觉得和你的问题没有关系。

标签: mysql ruby-on-rails ruby-on-rails-3 model


【解决方案1】:

检查您的迁移文件和db/schema.rb 文件上的时间戳。如果您最近一直在处理 git 的不同分支,您可能会遇到时间戳问题。

如果是这种情况,请尝试删除您的 schema.rb 文件,然后重新运行 rake db:migrate

【讨论】:

  • 我现在只使用 master 分支,还没有真正为这个应用创建一个新分支
  • 有趣...可以把生成的迁移文件的内容贴出来吗?
  • 就是没有生成迁移文件
  • 我尝试了 rake db:reset 然后 rake db:migrate 但在重置中我最后得到了这个假设_migrated_upto_version(20121208164420, ["/home/richard/recipe/db/migrate"])。 ..认为?我猜这是错误的假设吗?
  • 现在我删除了数据库,重新创建,删除了架构,新数据库迁移,重新生成了架构,但是当我创建模型时仍然没有生成迁移文件
【解决方案2】:

你的发电机看起来不错。
1. 这是给我的(Rails 3.2):

$ rails g model Rating ratings:integer
      invoke  active_record
      create    db/migrate/20130218203713_create_ratings.rb
      create    app/models/rating.rb
      invoke    test_unit
      create      test/unit/rating_test.rb
      create      test/fixtures/ratings.yml
$ cat db/migrate/20130218203713_create_ratings.rb
class CreateRatings < ActiveRecord::Migration
  def change
    create_table :ratings do |t|
      t.integer :ratings

      t.timestamps
    end
  end
end

尝试 rake db:migrate --trace

UPD 2.你可以查看数据库中的schema_migrations表。

【讨论】:

  • 我没有生成迁移文件,我得到的只是调用 active_record 并创建 app/models/rating.rb
  • 我在下面的答案中做了一些 cmets,这对此事有任何启示吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-12
  • 2011-05-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多