All for Joomla All for Webmasters
Ruby On Rails

Ruby On Rails: Customizando/Sobrescrevendo a geração de Scaffolds

Em desenvolvimento de software, um framework é uma abstração que provê um esqueleto de aplicação genérica. Essa aplicação genérica provê funcionalidades para evitar retrabalho comum à maior parte das aplicações, como a configuração do banco de dados e criação de tabelas/CRUD’s, por exemplo. Ao contrário das bibliotecas, na utilização de um framework há a inversão de controle, pois o fluxo da aplicação é feito pelo framework, não pelo programador.

Em Ruby on Rails, a geração dos arquivos MVC (Model-View-Controller) e dos assets é feita usualmente utilizando o gerador padrão do framework. Como o fluxo de controle é determinado pelo framework (convention over configuration), ele assume uma série de padrões quanto à geração desses arquivos. Por exemplo, o formato de arquivos é o coffee script, arquivos css no formato .scss e arquivos de template HTML em .erb. Ao longo de um projeto mais complexo e que possui um número relevante de entidades, torna-se viável sobrescrever esse comportamento padrão na geração dos arquivos.

Você pode fazer essa configuração no arquivo config/application.rb. Por exemplo, para alterar o formato padrão de script para js e evitar a geração de arquivos css:

Outros exemplos de costumização na geração podem ser vistos aqui e a referência completa pode ser consultada no guia de configuração do Rails na seção 3.3. Mais além do que configurações básicas da geração, muitas vezes é desejável customizar também o template dos arquivos gerados. A partir do Rails 3.0, é possível fazer a sobrescrita dos templates dos arquivos da view e do controller, por exemplo. Os arquivos de template da view e do controller devem ser colocados nas pastas “/lib/templates/erb/scaffold” e “/lib/templates/rails/scaffold_controller”, respectivamente (possivelmente as pastas não existem e devem ser criadas).

Você pode copiar os templates que o Rails utiliza originalmente para geração e alterá-los conforme sua necessidade. A forma mais fácil de encontrar esses arquivos é localizando a pasta da gem railties, através do comando “bundle show railties”. O arquivo de template do controller pode ser localizado em “lib/rails/generators/rails/scaffold_controller/templates/controller.rb” e os arquivos da view em “lib/rails/generators/erb/scaffold/templates”. Você pode copiar os arquivos que desejar sobrescrever para a pasta correspondente no projeto.

Apesar de possuir uma sintaxe com funções próprias, o código dos templates é bem intuitivo. Em um exemplo de customização, suponha que você está utilizando a gem chosen-select e deseja que, sempre que gerar um atributo de associação, ele já possua a classe “chosen-select” no formulário. Alterando o código original da partial form, o template ficaria como segue:

As linha 24-26 foram adicionadas ao código original para verificar se o atributo é uma associação e, para esse caso, exibir um select com a classe desejada. Não é necessário nenhuma alteração adicional para que as próximas views sejam geradas nesse formato. Em um post futuro, vou demonstrar uma forma mais avançada de customizar a geração dos scaffolds através da criação de um gerador próprio, permitindo um maior controle e possibilitando por exemplo a criação de arquivos adicionais aos gerados por padrão. Quaisquer dúvidas ou sugestões, utilize o campo de comentários ou entre em contato!

Você Também Pode Gostar

2 Comentários

  • Responder
    Sannytet
    12 de dezembro de 2018 at 01:28

    Nice posts! 🙂
    ___
    Sanny

  • Responder
    Daniel
    29 de julho de 2019 at 11:47

    Shoow cara, tudo que eu precisava!

  • Deixe uma resposta para Daniel Cancelar Resposta