Pregunta

¿Cómo puedo renderizar después de ejecutar una acción en un controlador tranquilo en lugar de redirigir?

Tengo un controlador con acciones estándar, y agregué una acción especial que agrega datos al recurso en cuestión, a través de un formulario en la página #show (Piensa en comentarios en una publicación). Estoy validando la entrada del formulario y quiero volver a representar la acción de mostrar en caso de error y redirigir a la acción de mostrar en caso de éxito.

Quiero renderizar para evitar que el usuario ingrese su información dos veces, pero cuando intento representar la acción de mostrar con un error en el flash [: aviso] recibo un error que dice que no estoy especificando una ID. Cuando especifico una ID, intenta representar una nueva plantilla que aún no existe.

Estoy pensando que debería ser tan simple como:

def add_comment
  if my_validation?
    save the object
    redirect_to :action => "show", :id => params[:id]
  else
    render :action => "show", :id => params[:id]
  end
end

Este no es mi código real, solo algo que armé ahora como ejemplo.

¿Fue útil?

Solución

La mejor manera es volver a renderizar: nuevo

def create
  @obj = TheObject.new(params[:object])
  render :action => :new unless @obj.save
end

Y en el nuevo.html.erb

<% form_for :obj, 
  :url => object_url(@obj), :html => {:method => :post} do |f| %>

  <%= f.text_field :name %>
<% end %>

De esa forma, las entradas en el formulario se completarán previamente con lo que ingresó el usuario.

Otros consejos

Cree un nuevo objeto de datos y agregue los valores del formulario, antes de volver a procesar, piense que funcionaría entonces. Si aún tiene problemas, intente configurar un valor booleano para editar filas nuevas o existentes, o cree dos vistas diferentes por completo.

Lo he hecho antes pero no recuerdo cómo. A veces, cuando usaba el uso muy típico del patrón MVC, todo era "automágico", en otras ocasiones (ya que tenía que usar una vieja base de datos peculiar) tenía que codificar toda la magia yo mismo; a veces, utilizando la función .new? (o cómo se llamaba) en el objeto ActiveRecord, otras veces utilicé temporalmente "valores mágicos". para ID (normalmente cadenas alfabéticas para valores de ID no válidos.

(Pido disculpas si cometí algunos errores, ha pasado un tiempo desde que codifiqué el código de Rails ...)

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top