Como comprobar los datos

hola lista

tengo una relacion muchos a muchos entre empresas y mercados
primero le doy al usuario la opcion de elegir la empresa, luego que
asocie esa empresa a un mercado existente y lo inserta en la tabla join
y lo hace bien

y también puede asociar ese empresa a un mercado nuevo que no este
creado
al tener que mostrar un formulario nuevo uso el new y el create del
controlador mercado

def new
@mercado=Mercado.new
respond_to do |format|
format.html {render :layout => false}
end
end

def create
@empresa = Empresa.find(:all).last
@mercado = Mercado.new(params[:mercado])
respond_to do |format|
if @mercado.save
i=0
flash[:notice]= ‘Se ha creado una nueva empresa.’
# se llama cuando creo una empresa nueva y le asigno un mercado
nuevo que no existe hasta el momento
(Empresa != 0) ? inserta2 : (render :text=>“no salio”)
#inserta2
format.html {redirect_to empresas_path() }
# vuelve al index de empresas, poner un mensaje como que la
empresa se creo flash[:notice]
end
end
end

la funcion inserta2 es la que inserta en la tabla join

la cosa es que uso las mismas funciones new y create cuando creo un
mercado que no esta asociado a ninguna empresa, asi que no debe estar en
la tabla join.

pero no consigo hacer un if que me regule esto.
es decir solo entra en inserta2 cuando haya rellenado previamente un
formulario de empresa nueva y un formulario de mercado nuevo.

pero como controlo eso, por que pregunto?
he probado
((Empresa.new(params[:empresa])!=0) && (Mercado !=0)) ? inserta2 : …

he probado con null también, pero me sigue dando error

como puedo comprobar eso.

muchas gracias y espero que puedan ayudarme
gracias

Buenas,
respecto a tu problema inicial no te puedo ayudar mucho ya que no
entiendo por qué se evalua la clase Empresa a 0…
Pero he visto que estás haciendo un select con todas las empresas para
luego recuperar la última:
@empresa = Empresa.find(:all).last

Si estás usando Rails 2.1 puedes optimizar la consulta para que te
devuelva un único registro usando el parámetro ‘:last’ igual que se
puede usar ‘:first’:

@empresa = Empresa.find(:last) # también funciona Empresa.last o
Empresa.first

Si estás en una versión anterior puedes hacer lo mismo con
@empresa = Empresa.find(:first, :order => ‘id DESC’)

Saludos

Maite P. wrote:

controlador mercado
@mercado = Mercado.new(params[:mercado])
empresa se creo flash[:notice]
pero no consigo hacer un if que me regule esto.

muchas gracias y espero que puedan ayudarme
gracias


/**

espero haberme explicado bien, si alguine se le ocurre como hacer esto
mas facil espero que me ayude, porque nose si lo estoy complicando
demasiado

Pues creo que si que te estas complicando demasiado. Estaras usando para
la
JOIN de las tablas:
has_many :trought
o
has_and_belong_to_many

Si este este tu caso, y sin tener mucha idea. te diria que revisases la
API
de ActiveRecord o uhacer un google para ver como se usan estas
relaciones.
Pero seguro que es más facil de lo que lo planteas.

Un saludo

El 1 de agosto de 2008 11:49, Maite
Piedra<[email protected]

escribió:

hola borja gracias por contestar, estoy usando la version de rails
2.0.2, por eso hago lo del last asi, de la otra forma no me funciona.

explico mejor mi problema pues sigo intentando que funcione.

yo puedo mediante un formulario crear un mercado nuevo. y se me crea
bien.

y también puedo mediante otro formulario crear primero la empresa y
luego un mercado

el lios que ambos usan las misma funciones para escribir en la base de
datos
es decir, cuando creo un nuevo mercado solo, uso su new y su create
y cuando creo primero la empresa y luego le asigno un mercado nuevo
genero el mismo formulario para mercado también con el mismo new y
create

y el problema viene en create que cuando creo un mercado solo, no tengo
que escribirlo en la tabla join porque no esta asociado a ninguna
empresa

pero cuando creo una empresa y despues un mercado si debe de escribirse
en la tabla join y es cuando tengo que llamar a inserta2

por eso dedo comprobar si tengo empresa antes de llamar a inserta2 y ese
es el problema
(Empresa != 0) ? inserta2 : (render :text=>“no salio”)

que no se como

espero haberme explicado bien, si alguine se le ocurre como hacer esto
mas facil espero que me ayude, porque nose si lo estoy complicando
demasiado

muchas gracias

hola andrés estoy usando has_and_belongs_to_many y escribir en la tabla
join me funciona eso si lo hace bien, pero me escribe siempre.

cuando creo un mercado me toma la último empresa que cree y me lo asocia
a ese mercado, cuando no deberia hacerlo en este caso.

pero cuando creo primero la emprea y despues el mercado si debe coger
el la ultima empresa para insertarlo en la tala join con elmercado.

la cosa es como filtro o como controlo que no he creado ninguna empresa
previa al mercado, para llamar a la funcion pertinente

Hola, siendo novato con rails, me atrevo a responder porque andaba con
lo mismo. Yo tengo un modelo persona, que tiene asociado con un
belongs_to otro modelo lugar.

Use un formulario del tipo <% form_tag :action => ´create´%>

en el controller del modelo persona puse
def create
@persona = Persona.new(params[:persona])
@lugar=Lugar.new(params[:lugar])
@lugar.save
@[email protected]

respond_to do |format|
  if @persona.save
    flash[:notice] = 'Persona was successfully created.'
    format.html { redirect_to(@persona) }
    format.xml  { render :xml => @persona, :status => :created, 

:location => @persona }
else
format.html { render :action => “new” }
format.xml { render :xml => @persona.errors, :status =>
:unprocessable_entity }
end
end
end

Anda, solo estan incluidos en este codigo un campo de cada modelo, ya
que estaba probando no le puse mas.

Ojo, esto no comprueba si tuvo exito el save del objeto lugar,
seguramente hay alguna otra forma de hacerlo mejor.

Esto lo saque modificando lo que encontre en este link
http://railsforum.com/viewtopic.php?id=717, no me funciono el save de
los dos modelos desde persona como esta planteado en el ejemplo y no se
porque.

Espero que sirva.

Saludos.
----- Original Message -----
From: Andrés gutiérrez
To: [email protected]
Sent: Friday, August 01, 2008 6:58 AM
Subject: Re: [Ror-es] como comprobar los datos

espero haberme explicado bien, si alguine se le ocurre como hacer esto
mas facil espero que me ayude, porque nose si lo estoy complicando
demasiado

Pues creo que si que te estas complicando demasiado. Estaras usando
para la JOIN de las tablas:
has_many :trought
o
has_and_belong_to_many

Si este este tu caso, y sin tener mucha idea. te diria que revisases
la API de ActiveRecord o uhacer un google para ver como se usan estas
relaciones.
Pero seguro que es más facil de lo que lo planteas.

Un saludo

El 1 de agosto de 2008 11:49, Maite
Piedra[email protected]escribió:

hola borja gracias por contestar, estoy usando la version de rails
2.0.2, por eso hago lo del last asi, de la otra forma no me 

funciona.

explico mejor mi problema pues sigo intentando que funcione.

yo puedo mediante un formulario crear un mercado nuevo. y se me crea
bien.

y también puedo mediante otro formulario crear primero la empresa y
luego un mercado

el lios que ambos usan las misma funciones para escribir en la base 

de
datos
es decir, cuando creo un nuevo mercado solo, uso su new y su create
y cuando creo primero la empresa y luego le asigno un mercado nuevo
genero el mismo formulario para mercado también con el mismo new y
create

y el problema viene en create que cuando creo un mercado solo, no 

tengo
que escribirlo en la tabla join porque no esta asociado a ninguna
empresa

pero cuando creo una empresa y despues un mercado si debe de 

escribirse
en la tabla join y es cuando tengo que llamar a inserta2

por eso dedo comprobar si tengo empresa antes de llamar a inserta2 y 

ese
es el problema

(Empresa != 0) ? inserta2 : (render :text=>"no salio")


que no se como

espero haberme explicado bien, si alguine se le ocurre como hacer 

esto
mas facil espero que me ayude, porque nose si lo estoy complicando
demasiado

muchas gracias

--
Posted via http://www.ruby-forum.com/.
_______________________________________________

Ror-es mailing list
[email protected]
http://lists.simplelogica.net/mailman/listinfo/ror-es


Ror-es mailing list
[email protected]
http://lists.simplelogica.net/mailman/listinfo/ror-es