Validations: duda mostrando errores


#1

He añadido unos validates a mi model. La cosa es que me salga el listado
de errores en la vista cuando no se grabe, pero dependiendo de si uso en
mi controaldor redirect_to :action no me funciona, sólo me funciona con
:render_action

Mi model:
validates_presence_of :titulo,:texto,:message=>‘campo requerido’
validates_uniqueness_of :titulo, :message=>‘ya existe una foto con ese
nombre’

Mi helper:
def pintar_errores(objeto)
count=objeto.errors.count
unless count.zero?
how=plural_errores(count)
html={}
html[“class”]=“errores”
header_message="Hay #{count} #{how}: "
error_messages=objeto.errors.full_messages.map {|msg|
content_tag(:li,msg)}
content_tag(:div, content_tag(:h2,header_message)<<
content_tag(:ul,error_messages),html)
else
‘’
end
end

Mi controlador:
def create_foto
@foto=Foto.new(params[:foto])
if @foto.save
flash[:notice]=‘La foto “‘removed_email_address@domain.invalid+’” ha sido creada’
logger.info ‘La foto “‘removed_email_address@domain.invalid+’” ha sido creada’
redirect_to :action =>‘edit_proyecto’, :id=>@foto.proyecto_id
else
logger.info ‘La foto “‘removed_email_address@domain.invalid+’” ha sido creada’
redirect_to :action=>‘new_foto’, :id=>@foto.proyecto_id
end
end

Mi vista:
<%=pintar_errores(@foto)%>

Si doy de alta una foto, en el caso de que coja los validates en el
controlador no se graba, se mete en el else y me redirige al action
‘new_foto’ , pero en la vista no me muestra los errores del validates.
Sólo me pasa cuando uso redirect_to :action, cuando tengo
:render_action me funciona perfectamente y si me los muestra.
Qué puedo hacer para que se muestren usando el redirect_to :action?
Gracias


#2

On 5/9/07, Miguel Angel Calleja Lázaro removed_email_address@domain.invalid wrote:

Si doy de alta una foto, en el caso de que coja los validates en el
controlador no se graba, se mete en el else y me redirige al action
‘new_foto’ , pero en la vista no me muestra los errores del validates.
Sólo me pasa cuando uso redirect_to :action, cuando tengo
:render_action me funciona perfectamente y si me los muestra.
Qué puedo hacer para que se muestren usando el redirect_to :action? Gracias

Y por qué no utilizarías el render :action ?


#3

Damian J.
escribió:

Y por qué no utilizarías el render :action ?


Ror-es mailing list
removed_email_address@domain.invalid
http://lists.simplelogica.net/mailman/listinfo/ror-es

necesito pasar un parámetro y que se ejecute el método, con render
:action sólo saca la vista, no? por éso utilizo redirect_to
podría hacer:

new_foto
render_action ‘new_foto’
pero cómo le paso el parámetro a new foto?


#4

Miguel Angel Calleja Lázaro wrote:

necesito pasar un pará­¥tro y que se ejecute el mé´¯do, con render
:action só¬¯ saca la vista, no? por 鳯 utilizo redirect_to
podrí¡ hacer:

Revisa render :partial :

render :partial => “un_partial”, :object => @un_objeto

posiblemente te sea de ayuda.


Jaime Mora R.


#5

Hernan F.
escribió:

@foto=Foto.new(params[:foto])

Si señor, éso es, crearme la instancia en el else y usar render action,
me funciona, muchas gracias


#6

hola
que pasaría con esto ?

Controller
def new
@foto = Photo.new
@projecto = params[:projecto_id]
end

def create_photo
@foto=Foto.new(params[:foto])

if @photo.save

else
logger.info ‘La foto “‘removed_email_address@domain.invalid+’” no ha sido creada’
@projecto = params[:photo][:projecto_id]
render :action => ‘new’
end
end

Saludos
hernan