如何使用rake db:migrate生成schema.rb时使用:sql架构格式

时间:2012-11-30 14:08:33

标签: ruby ruby-on-rails-3 rake dbmigrate schema.rb

如果在config/application.rb中使用此选项:

config.active_record.schema_format = :sql

然后当你这样做:

rake db:migrate

它只会转储db/structure.sql。我知道它没有使用db/schema.rb,因为它使用:sql选项,但是如何让rake db:migrate生成db/schema.rb

我们需要它,因为RubyMine 4.5和IntelliJ IDea 11使用db/schema.rb来自动完成列。

1 个答案:

答案 0 :(得分:9)

即使使用db/schema.rb选项生成/更新:sql,您也可以将其添加到Rakefile

Rake::Task["db:migrate"].enhance do
  if ActiveRecord::Base.schema_format == :sql
    Rake::Task["db:schema:dump"].invoke
  end
end

这对IDea和RubyMine来说应该没问题。

对于仅希望文件供参考的其他人,您可能希望将其重命名为db/schema.rb.backup之类的其他内容,这样就不会让人感到困惑。要做到这一点:

Rake::Task["db:migrate"].enhance do
  if ActiveRecord::Base.schema_format == :sql
    Rake::Task["db:schema:dump"].invoke
    File.rename(File.expand_path('../db/schema.rb', __FILE__), File.expand_path('../db/schema.rb.backup', __FILE__))
  end
end

(注意:在../中的路径中使用Rakefile因为__FILE__评估的路径以/Rakefile结尾。)