schema.rb中的Git数据库更改

时间:2014-04-02 12:00:39

标签: ruby-on-rails database ruby-on-rails-3 git git-branch

所以有2个相关的分支机构。 通知 shipping_options

我从notifications中检查了master,然后进行了两次重要的数据库更改:

  • 创建GeneralNotice模型
  • 修改现有 Notice模型,添加布尔值dismissed

然后shipping_options也在与notifications相同的状态下检出了主人,并且没有进行任何数据库更改,只有少量代码更改。

我第一次从rake db:migrate切换到notifications时跑shipping_options,反之亦然。

目前,当我在notifications时,并运行rails c我得到以下内容:

2.0.0-p451 :001 > Notice
 => Notice(id: integer, title: string, description: text, created_at: datetime, updated_at: datetime, kind: string, general_notice_id: integer, shop_id: integer, dismissed: boolean) 

2.0.0-p451 :002 > GeneralNotice
 => GeneralNotice(id: integer, title: string, description: text, created_at: datetime, updated_at: datetime) 
2.0.0-p451 :003 > 
  • 通知有dismissed(正如预期的那样)
  • GeneralNotice存在(如预期的那样)

然后我切换到shipping_options,我希望你一直关注,因为这里有令人困惑的部分......

2.0.0-p451 :001 > Notice
 => Notice(id: integer, title: string, description: text, created_at: datetime, updated_at: datetime, kind: string, general_notice_id: integer, shop_id: integer, dismissed: boolean) 

2.0.0-p451 :002 > GeneralNotice
NameError: uninitialized constant GeneralNotice
    from (irb):2
    from /Users/marcoprins/.rvm/gems/ruby-2.0.0-p451/gems/railties-3.2.13/lib/rails/commands/console.rb:47:in `start'
    from /Users/marcoprins/.rvm/gems/ruby-2.0.0-p451/gems/railties-3.2.13/lib/rails/commands/console.rb:8:in `start'
    from /Users/marcoprins/.rvm/gems/ruby-2.0.0-p451/gems/railties-3.2.13/lib/rails/commands.rb:41:in `<top (required)>'
    from script/rails:6:in `require'
    from script/rails:6:in `<main>'
2.0.0-p451 :003 > 
  • GeneralNotice不存在,所以通过根据我的分支更改数据库显然git非常好用和有用
  • Notice 仍有布尔值dismissed ... Whaaaat ???? git是好还是不好? HELP !!!!!!

2 个答案:

答案 0 :(得分:1)

  1. 由于您已在第一个分支(通知)中运行迁移,因此该列已添加到数据库表中,因此它会显示您是否进行检查。 inspect方法直接使用数据库表,反映列(属性)。

  2. GeneralNotice:如果检查数据库,它将包含表(general_notices),但由于此分支中不存在定义了GeneralNotice的文件general_notice.rb,因此会抛出未初始化的常量错误。

  3. 请查看thisthis,了解将数据库置于版本控制之下的一些想法。

答案 1 :(得分:1)

每当您切换分支,并且分支可能包含一组不同的迁移时,最好运行从rake db:reset文件重新加载数据库模式的schema.rb

为确保您的schema.rb在所有分支中都是最新的,每当您将分支与新迁移合并时,最好运行rake db:migrate:reset。此rake任务从一开始就运行所有迁移,并将生成的数据库方案写入文件。