Validacion de un formulario con que captura a 2 tablas

Hola…
Aqui ando de pregunton de nuevo…

Ya logre tener un formulario el cual esta compuesto de elementos que
capturan a 2 tablas user y virtual

New user

<%= error_messages_for :user %>
<% form_for(@user) do |f| %>

Email
<%= f.text_field :email %>

Password
<%= f.text_field :password %>

Name
<%= f.text_field :name %>

<% fields_for :virtual do |f| %>

Email
<%= f.text_field :email %>

Destination
<%= f.text_field :destination %>

<% end %>

<%= f.submit "Create" %>

<% end %> <%= link_to 'Back', users_path %>

El metodo create es este para el objeto USER

def create
@user = User.new(params[:user])
@user.uid = 1008
@user.gid = 1008
@user.homedir = “var/vmail”
@user.maildir = @user.email+"/"
@user.quota = 52428800
@user.Virtual = Virtual.new(params[:virtual])

respond_to do |format|
  if @user.save ....

y mis modelos son estos

class User < ActiveRecord::Base
has_one :Virtual
validates_associated :Virtual
validates_presence_of :email,:password, :name => “Campo Requerido”

end

class Virtual < ActiveRecord::Base
belongs_to :User
validates_presence_of :email, :destination => “Campo Requerido”
end

El problema es que cuando capturo a la forma no me valida los campos en
forma indiviual de la tabla VIRTUAL

Pense que la validacion la hacia por medio de la relacion entre
modelos…

Alguna sugerencia…

Gracias

Hola Faustino, no te entendi bien a que te refieres cuando dices en
forma
individual, pero aqui te doy alguna ayuda:

En tu modelo user, estableces la siguiente validacion:
validates_associated :Virtual

Entonces aqui estas inidicando que se debe validar tambien el objeto
asociado, es decir, supongamos que tenemos esto en controlador

def create
@user = User.new(params[:user])
@user.virtual.build(params[:virtual])

if @user.valid? #Aqui estas validando ambos modelos
if @user.save
respond_to do |format|
format.html{ redirec_to users_url }
else

end

else

end
end

Todo este codigo te deberia funcionar sin nigun problema, espero haberte
ayudado en algo.

Saludos.

El día 27/02/08, Faustino V. [email protected]
escribió:

@user = User.new(params[:user])
@user.Virtual = Virtual.new(params[:virtual])

en el controlador uso esto…

Si uso esto simplemente no encuentro el metodo virtual…

@user.virtual.build(params[:virtual])

Creo que ese es mi problema

aqui me equivoque
no es @Virutal.new(params[:user]

es @Virutal.new(params[:virtual]

Hola
mira yo hice algo parecido y solo hice lo siguiente en el create
en tu caso en el create de user

def create
@user.new(params[:user])
@Virutal.new(params[:user])
User.transaction do
@user.Virtual = @Virtual
if @Virtual.save!
@user.save!
end
#aqui direccionas a si se guardo correctamente
end
rescue ActiveRecord::RecordInvalid
@virtual.valid?
#aqui regresas a tu formulario algo salio mal :stuck_out_tongue:

end

a mi me funciono bien

Espero se da ayuda

Hola Normando, hay que tener en cuenta que al usar esta solucion tu base
de
datos debe soportar transacciones, si estas en mysql debe ser del tipo
InnoDB.

Saludos.

2008/2/27, Normando V. [email protected]: