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.