una - Ruby on Rails: página de confirmación para la creación de objetos ActiveRecord
ruby on rails controladores (4)
Usando Ruby on Rails quiero 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 enviarlo y el objeto que se guardará en la base de datos.
Un patrón común;
- Visitas de usuario / entrada / nuevo
- El usuario ingresa los detalles y hace clic en enviar
- El usuario se redirige a / entrada / confirmar que muestra la entrada y hace clic en enviar o editar para corregir los errores
- El objeto se guarda
¿Cómo lo implementarías?
Algunas opciones
1- almacena el objeto que deseas crear en la sesión hasta que toques la página de confirmación, luego solo guárdalo
2- pase alrededor del objeto con cada publicación / envío desde nuevo -> detalles -> confirmar
Probablemente iría con 2, ya que no soy propenso a guardar estado con la sesión.
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.
¿Derecha?
Otra opción para resolver este problema es agregar un atributo de confirmación virtual a su modelo. De esta forma, 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 se guardará correctamente porque la validación fallará en el campo de confirmación. Puede detectar esta situación y presentar algo como esto:
<% form_for(@my_record) do |form| %>
...
<%= form.check_box :confirmation %> Really create this record.
<%= submit_tag(''Confirm'') %>
<% end %>
Probablemente agregue una acción de "vista previa" al archivo routes.rb para ese modelo:
map.resource :objects, :new => { :preview => :post }
Llegaría a esta acción de preview
POSTANDO la ruta con nombre preview_object_url
. Necesitarás esencialmente crear el Object
de la misma manera que lo harías en tu acción de create
, como esta:
def preview
@object = Object.new(params[:object])
end
Esta página POSTARÍA a la acción de create
, que luego crearía el Objeto. Es bastante sencillo.
http://api.rubyonrails.org/classes/ActionController/Resources.html