2009-01-15 8 views
7

Uso de Ruby on Rails Deseo una página de confirmación antes de crear un objeto ActiveRecord. El usuario verá una vista previa del elemento que está creando antes de enviar y el objeto que se guarda en la base de datosRuby on Rails: Página de confirmación para la creación de objetos ActiveRecord

Un patrón común;

  • visitas de los usuarios/entrada/nueva
  • usuario entra en detalles y hace clic en Enviar
  • usuario es redirigido a/entrada/confirmar que muestra la entrada y hace clic en enviar o modificar para corregir errores
  • objeto se guarda

¿Cómo lo implementarías?

Respuesta

0

No estoy seguro de cómo hacer esto (RoR es nuevo para mí) pero podría especificar la acción para/nuevo como/confirmar, y luego llama a crear.

Derecho?

3

Unas pocas opciones

1- almacenar el objeto que desea crear en la sesión hasta llegar a la página de confirmación, a continuación, sólo guardarlo

2- pase alrededor del objeto w/cada post/presentar desde nuevo -> detalles -> confirmar

Probablemente vaya con 2, ya que no soy propenso a guardar estado con la sesión.

5

Otra opción para resolver este problema es agregar un atributo de confirmación virtual a su modelo. De esta manera, no hay necesidad de crear una acción separada para esto:


class MyRecord < ActiveRecord::Base 
    attr_accessor :confirmation 
    validates_acceptance_of :confirmation, :on => :create 
end 

Ahora, su nuevo objeto no salvará correctamente porque la validación fallará en el campo de confirmación. Puede detectar esta situación y presente algo como esto:


<% form_for(@my_record) do |form| %> 
    ... 
    <%= form.check_box :confirmation %> Really create this record. 
    <%= submit_tag('Confirm') %> 
<% end %> 
5

que probablemente añadir una acción de "vista previa" al archivo routes.rb para ese modelo:

map.resource :objects, :new => { :preview => :post } 

que se obtendría a este preview acción mediante POSTING la ruta con nombre preview_object_url. Lo que se necesita para crear esencialmente el Object de la misma manera que lo haría en su acción create, así:

def preview 
    @object = Object.new(params[:object]) 
end 

Esta página sería entonces Subir a la acción create, que luego crear el objeto. Es bastante sencillo.

http://api.rubyonrails.org/classes/ActionController/Resources.html