Crear registro de otro model con after_create / callbacks

Buenas,

Estoy frenado con un problema de Callbacks. Necesito ayuda!!!

Estoy usando login_engine para la autenticacion en mi aplicacion RoR.
Necesito crear un nuevo Deposito para un nuevo usuario al hacer sign_up.
Ya
probe de mil maneras y no puedo lograr que if @deposito.save devuelva
true (es
decir, que guarde un nuevo Deposito) dentro del callback after_create.
En el
Deposito, necesito el id del User (responsable_id).

Tambien probe con Transactions, pero tampoco pude hacerlo funcionar.
Para
colmo no tira ningun error, simplemente devuelve false.

Aca van los modelos

class Deposito < ActiveRecord::Base
belongs_to :user, :foreign_key => ‘responsable_id’
end

class User < ActiveRecord::Base
has_many :depositos

def after_create
# Creo un Deposito para el Usuario Registrado
@deposito = Deposito.new

@deposito.nombre = self.apellidos + ", " + self.nombres + " 

(Deposito
Personal)"
@deposito.responsable_id = self.id

if @deposito.save
  ...
else
  ...
end

end

end

Alguien ha tenido que lidiar con una situacion similar?

Desde ya, muchas gracias!

Fabian

On Nov 5, 2006, at 10:48 PM, Fabian Porta wrote:

class User < ActiveRecord::Base
if @deposito.save
Se ve algo si cambias @deposito.save por @deposito.save! ?

– fxn

Xavier,

Ahora con @deposito.save! pude ver cual era el error! Lo solucione y
funciono de lujo!

Segun la API de Rails, el metodo save! hace lo siguiente: “Attempts to
save
the record, but instead of just returning false if it couldn’t happen,
it
raises a RecordNotSaved exception”

Alguien tiene algun ejemplo de como manejar ese exception
(RecordNotSaved)
en un Callback?

Muchas gracias!

Fabian

On Nov 6, 2006, at 2:32 AM, Fabian Porta wrote:

Xavier,

Ahora con @deposito.save! pude ver cual era el error! Lo solucione
y funciono de lujo!

Magnifico, que ocurria? Fallaba alguna validacion?

– fxn

No sería algo
así?
begin
algo.save!
rescue RecordNotSaved
hago algo…
end

PD: recomendación: usar el método de clase en vez de sobreescribir la
instancia:
class Algo < …
after_create :crear_otro_lindo_registro

protected
def crear_otro_lindo_registro
otro = Otro.new
otro.algo_id = id
end
end

PD2: necesitás que deposito sea una variable de instancia? (léase
@deposito en vez de deposito?) a mí me pasaba lo mismo, la costumbre
de ver el código del scaffold… automáticamente le ponía (y le sigo
poniendo) la @ a todas las variables locales que necesito :stuck_out_tongue:

PD3: algo más lindo: otro.algo = self (sin _id)

Gracias a todos por los consejos y aportes!

Fallaba una validacion de campo requerido, pero yo nunca me enteraba :X

Saludos,

Fabian

PD: por casualidad alguien me puede pasar codigo CSS para que un link
armado
con una imagen no le haga recuadro ni subrayado, es decir que solo sea
un
link.

estoy usando
<%= link_to(image_tag(“add.png” :alt=> “Agregar”), :action => “agregar”,
:id
=> “item”) %>

Damian J. wrote:

a img { border-width: 0; }

a img { border:none; }

a img { border-width: 0; }

No exactamente, porque utilizando la declaración abreviada (“border”)
es obligatorio especificar todos los atributos implicados. La forma
correcta sería:

border: 0px none #ffffff;

o bien

border-width: 0; :slight_smile: