2010-11-08 11 views
5

Estoy haciendo un buen progreso con mi primera aplicación Rails (usando Rails 3). La interacción MVC funciona bien, pero estoy teniendo dificultades con un formulario que no se relaciona directamente con un modelo.Rieles: restauración de contenidos de forma no modelo que utiliza form_tag

Estoy usando form_tag, y en el caso de éxito, todo se comporta bien. Sin embargo, el manejo de errores es poco amistoso. El mensaje de error real se almacena en el flash y se muestra bien por layouts/application.html, pero realmente me gustaría que el formulario pudiera recordar los contenidos que el usuario acaba de completar. Pero no: todos los campos restablecer a sus valores predeterminados.

Me encanta la forma en que se forman las acciones RESTful en los objetos que recuerdan automáticamente sus valores enviados, y se resaltan en rojo si hay errores. Estoy bien sin el resaltado rojo, pero me gustaría mucho si pudiera hacer que los campos del formulario mantuvieran los valores enviados.

¿Alguien puede aconsejar cómo hacer esto?

Extractos de los archivos relevantes:

vistas/cardsets/import.html.erb:

<%= form_tag :action => :import_data, :id => @cardset do %> 
    ... 
    <%= text_field_tag "separator", "", :maxlength => 1 %> 
    ... 
    <%= text_field_tag "formatting_line" %> 
    ...etc (more fields) 

controladores/cardsets_controller.rb:

# POST /cardsets/1/import_data 
def import_data 
    success, message = @cardset.import_data(params, current_user) 
    if success 
    redirect_to(@cardset, :notice => message) 
    else 
    flash.now[:error] = message 
    render :import 
    end 
end 

Respuesta

9

El segundo arg a text_field_tag ​​es el valor para completar en el campo con. Intentar algo como esto:

<%= text_field_tag "separator", params[:separator], :maxlength => 1 %> 
+0

Funcionó de maravilla! ¡Gracias! – AlexC

1

Si el campo tiene un valor predeterminado, tendrá que configurarlo de la acción "show" de la forma:

# GET 
def show_form 
    params[:key] = 'default' 
end 

# POST 
def validate_form_and_act 
    # Don't set it here to reuse what the user passed. 
end 

o directamente en la plantilla (menos bueno porque utiliza un || cada vez y agrega más datos de controlador para ver):

<%= text_field_tag 'name', params[:key] || 'default' %> 
Cuestiones relacionadas