Problemas com set_sequence_name Firebird

Já venho gastando algumas tardes tentando resolver um probleminha que vem me dando asía em Rails, aqui no trabalho o pessoal mexe prioriatariamente em Delphi mais B2B e estamos criando agora alguns serviços online em Rails, bom, o legado de Delphi é Firebird (1.5) aí começa meu problema..

PROBLEMA

O ActiveRecord::Base utilizado no model para firebird e alguns outros bancos os quais não oferece a opção de não ter um generator de chaves, e no banco que eu uso todas as chaves são criadas pelo cliente e não por auto-incremento !

Como o fonte é de 2005 e até agora sem patches não achei de forma alguma nem mesmo a menção do problema em forums, aqui vai a solução encontrada pelo meu amigo Denner:

Cria-se um generator da forma normal no seu banco : CREATE GENERATOR GENE_UF;

No seu Model defina:

class UF < ActiveRecord::Base
=> set_sequence_name nil

No seu Controller altere a definição na parte de create:


def create
@uf = UF.new(params[:uf])
=> @uf.sua_pk = params[:uf][‘sua_pk‘]

Pronto ! Desta forma logo após ser setado o auto-incremento ele vai ser sobrescrito pelo valor passado no form =) Desta forma apesar de ter que ser feita uma alteração no banco é mais de leve do que mudar a PK.
Sem alterações no banco !

Espero que funcione para todos, se possível comentem ou postem outras sugestões.

Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s