50 votos

Rails 3 / Form sin Modelo: ¿Cómo puedo crear un formulario que no está vinculado a un modelo?

Tengo un modelo, y tengo una vista que muestra un formulario para crear un nuevo objeto basado en ese modelo. Vamos a llamar a ese formulario "Form1". Una vez que el usuario envía Form1, se crea el objeto. Luego quiero mostrar, en un siguiente página, un segundo formulario ("Form2"), en la que pide al usuario marcar varias opciones antes de que el objeto se guarda en la base de datos.

Mi problema es, probablemente, muy básico. No sé cómo crear Form2, dado que no está ligada directamente a la modelo. Porque soy una Rieles de novato, yo sólo han creado formas con el siguiente código:

form_for(@object) { |f| . . . . }

(donde @objeto es un objeto instanciado de la modelo).

El problema que estoy teniendo es: no creo que el tipo de código de trabajo para mis propósitos aquí. ¿Cómo puedo crear Form2, dado que no debe basarse en @objeto o @objeto del modelo?

Para dar algunos detalles de mi aplicación: El sitio acepta valores (Form1) antes de redireccionar a una OAuth servidor. Cuando el usuario comprueba sus credenciales en el OAuth server, ella se redirige de nuevo a mi sitio. XML-RPC solicitud, a continuación, recupera información acerca de la cuenta del usuario en el OAuth servidor. La respuesta XML puede indicar que el usuario sólo tiene una cuenta en el OAuth servidor. Si es así, que algunos de los valores se recuperan desde el XML y se añade a la de objeto-que es entonces (por fin) guardados en la base de datos, y el usuario es redirigido a una página de éxito. Sin embargo, si el XML de respuesta indica que el usuario tiene varias cuentas en el OAuth servidor, quiero mostrar un formulario (Form2) que permite que el usuario seleccione la que cuentas en el OAuth servidor asociar con mi sitio. Así Form2 realmente le pide al usuario cuántos objetos para crear, en lugar de hablar de los atributos específicos de un objeto.

89voto

Dylan Markow Puntos 65796

Uso form_tag en lugar de form_for, a continuación, utilice el formulario correspondiente ayudantes: text_field_tag en lugar de f.text_field, text_area_tag en lugar de f.text_area, etc. Ejemplo:

<%= form_tag "/my_controller/update2" do %>
  <%= text_field_tag "account", "default info" %>
  <%= submit_tag "Save" %>
<% end %>

Los Rieles de la API sitio tiene una gran referencia para todos los _tag ayudantes: http://api.rubyonrails.org/classes/ActionView/Helpers/FormTagHelper.html

31voto

Karl Rosaen Puntos 2096

Comenzando en rails3, validaciones han sido sacados de ActiveRecord, así que usted puede crear vainilla objetos que puedan ser utilizados como validadores con la forma de ayudantes:

 class Person
   include ActiveModel::Validations

   attr_accessor :first_name, :last_name

   validates_each :first_name, :last_name do |record, attr, value|
     record.errors.add attr, 'starts with z.' if value.to_s[0] == ?z
   end
 end

y luego, en su plantilla:

<%= form_for(Person.new) do |f| %>
...

Es una forma práctica de obtener los beneficios de la forma ayudantes para cosas como los formularios de correo electrónico sin tener que crear un modelo de objeto ligado a su esquema.

4voto

Eric Woodruff Puntos 1886

Si usted está buscando para utilizar la creación de un nuevo producto, a continuación, hay una respuesta específica para que aquí No form_tag trabajo con Simple_form?

Iteramos.com

Iteramos es una comunidad de desarrolladores que busca expandir el conocimiento de la programación mas allá del inglés.
Tenemos una gran cantidad de contenido, y también puedes hacer tus propias preguntas o resolver las de los demás.

Powered by:

X