Salvando SQL views no schema em aplicações Rails

on October 13, 2014 14:51

Se você usa views na sua aplicação Rails, seja porque ela é uma aplicação legada, ou elas são usadas para simplificar as consultas para relatórios, por exemplo, pode ter alguns problemas na hora de fazer o setup do projeto em uma máquina nova.

Eu não sabia (até hoje), mas o schema.rb não guarda as informações de criação das views, que você provavelmente fez em uma migration. Afinal, a não ser que tenha usado uma gem específica pra isso, você usou SQL puro para criar a migration.

Quando tive esse problema, pensei em fazer isso no db/seeds.rb, e mandar executar o SQL, mas não parecia uma solução muito elegante, afinal eu não estava criando dados de seed, mas criando estrutura. Daí eu encontrei a solução perfeita.

Para fazer a migration exportar as views, devemos mudar o formato dessa exportação para SQL. Você pode fazer isso no application.rb:

# config/application.rb
config.active_record.schema_format = :sql

ou, se você estiver numa aplicação Rack qualquer, pode colocar no seu Rakefile:

# Rakefile
ActiveRecord::Base.schema_format = :sql

Quando você executar a migration, gerará um arquivo structure.sql em vez do schema.rb.

Para carregar, em vez de rake db:schema:load, use:

# console
$ rake db:structure:load

E as views serão criadas.

Fonte: Using Rails and SQL Views for a Report

comments powered by Disqus