Update en tabla

Hoooooola

Estoy intentando hacer un insert en una tabla y un update en otra.
El update q quiero hacer es del campo email de la tabla y tendría q
tener una pinta así:
UPDATE establishments SET email = ‘[email protected]’ WHERE id
= 1

El método q estoy usando es el siguiente:

def create
# Inserto la línea en establishment_contents
@establishment_content =
EstablishmentContent.new(params[:establishment_content])
if @establishment_content.save
# Actualizao la línea en establishments
@establishment = Establishment.find(params[:id])
if @establishment.update_attributes(params[:email])
redirect_to :action => ‘linkMenu’
end
end
end

El insert la hace correcto, pero el update me da el siguiente error:

Couldn’t find Establishment without an ID

c:/ruby/lib/ruby/gems/1.8/gems/activerecord-1.15.3/lib/active_record/base.rb:1012:in
find_from_ids' c:/ruby/lib/ruby/gems/1.8/gems/activerecord-1.15.3/lib/active_record/base.rb:419:infind’
#{RAILS_ROOT}/app/controllers/establishment_contents_controller.rb:24:in
create' #{RAILS_ROOT}/app/controllers/establishment_contents_controller.rb:68:inaceptar’

Parameters: {“establishment”=>{“id”=>“1”,
“email”=>“[email protected]”}, “commit”=>“Aceptar”,
“establishment_content”=>{“title”=>“Contactar”, “establishment_id”=>“1”,
“description”=>“texto contactar”, “introduction”=>“intro contactar”}}

Alguien sabe como podría solucionarlo??

Muchas gracias

Me parece que el problema es que estas pasando parámetros de dos
modelos,
creo que deberías hacer así params([:establishment][:id]).

Prueba eso y avisa si anda OK.

saludos,
Juan P…

Por partes… estas haciendo el Update con el metodo create… no
deberías. Si lo que quires hacer es acualizar el mail puede hacer algo
como:

def update_mail
@establishment = Establishment.find(params[:id])
@establishment.update_attribute(:mail, parmas[:mail)
end

o algo así, si has usado andamiaje deberías de tener un metodo update
con las cosas.

Gracias por responder,

Os he hecho caso y he separado el alta de las actualizaciones.
El alta me funciona correctamente, pero las actualizaciones no…

Con este código
def update
@establishment_content = EstablishmentContent.find(params[:id])
@establishment_content.update_attributes(params[:establishment_content])
end

Me da el siguiente error
Couldn’t find EstablishmentContent without an ID

Cuando tengo los siguiente parámetros donde sí tengo el id:
“establishment_content”=>{“title”=>“Sobre el Bar”,
“establishment_id”=>“1”, “id”=>“14”, “description”=>“texto sobre mod”,
“introduction”=>“intro sobre mod”}

Y en otro update que me pasó Pablo
def update_mail
@establishment = Establishment.find(params[:id])
@establishment.update_attribute(:mail, parmas[:mail)
end

Me dice lo mismo
“establishment”=>{“id”=>“1”, “email”=>“[email protected]”}

Puede ser por mandar en el request datos de dos modelos distintos a un
sólo controller??

Muchas gracias

Juan P. wrote:

Me parece que el problema es que estas pasando parámetros de dos
modelos,
creo que deberías hacer así params([:establishment][:id]).

Prueba eso y avisa si anda OK.

saludos,
Juan P…

mmmmm Perdón Juna Pablo lo había puesto mal.

Tal como lo dices tú funciona un update pero el otro no.
Este me da el error “ArgumentError (wrong number of arguments (1 for
2))”

@establishment = Establishment.find(params[:establishment][:id])
@establishment.update_attributes(params[:establishment][:mail])

Lo q quiero hacer es un update establishments set mail =
‘params[:establishment][:mail]’ where if = params[:establishment][:id]

Muchas gracias

Juan P. wrote:

En la primer linea encuentras el establishment, y en la segunda cuando
lo
quieres actualiuzar tienes dos problemas, primero que al ser uno solo es
update_attribute sin la s al final, y ademas no le estas pasando el
atributo
que vas a actualizar, solo el valor que va a tomar.

Asi que te quedaria asi

@establishment = Establishment.find(params[:establishment][:id])
@establishment.update_attribute(mail, params[:establishment][:mail])

saludos,
Juan P…

Muchas gracias.
Ese era el problema :wink:

En la primer linea encuentras el establishment, y en la segunda cuando
lo
quieres actualiuzar tienes dos problemas, primero que al ser uno solo es
update_attribute sin la s al final, y ademas no le estas pasando el
atributo
que vas a actualizar, solo el valor que va a tomar.

Asi que te quedaria asi

@establishment = Establishment.find(params[:establishment][:id])
@establishment.update_attribute(mail, params[:establishment][:mail])

saludos,
Juan P…