如果在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
来自动完成列。
答案 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
结尾。)