2012-11-30 12 views
6

如果使用config/application.rb了此選項:如何使耙分貝:遷移產生schema.rb使用時:SQL架構格式

config.active_record.schema_format = :sql 

然後當你這樣做:

rake db:migrate 

只轉儲該db/structure.sql。我知道,因爲它使用的是:sql選項是不使用db/schema.rb,但你怎麼能做出rake db:migrate產生db/schema.rb也?

我們需要的是因爲列的自動完成的RubyMine 4.5和IntelliJ IDEA的11使用db/schema.rb

回答

8

,即使使用:sql選項生成/更新db/schema.rb,你可以把這個在您的Rakefile

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

這應該是罰款理念和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結束的路徑。)

+0

THX工作完美。只有改變,我需要做的是重命名的文件,因爲我用有時'scaffold'(這個搜索模式與正則表達式//schema[^/]*.rb$)。我改變'File.rename(File.expand_path( '../分貝/ schema.rb',__FILE__),File.expand_path( '../分貝/ schema.backup.rb',__FILE __))' – inye