Si crea una clase para representar a su objeto (Digamos que es ContactInfo
) se pueden definir los métodos de esa clase, a continuación, utilícelos usando los ayudantes estándar del constructor de la forma de los carriles.
class ContactInfo
attr_accessor :name, :company, :email, :phone, :comments
def initialize(hsh = {})
hsh.each do |key, value|
self.send(:"#{key}=", value)
end
end
end
Y en su formulario:
<h2>Contact Us</h2>
<% form_for(@contact_info, :url => path_for_your_controller_that_handles_this, :html => {:method => :post}) do |f| %>
<%= f.label :name %>
<%= f.text_field :name %>
...
<% end %>
Hasta el momento, a quién le importa ¿verdad?
Sin embargo, agregue el validatable gem, y usted tiene un verdadero motivo para hacer esto! Ahora puede tener mensajes de validación como un modelo real.
Salida mi clase ContactInfo completado:
class ContactInfo
include Validatable
attr_accessor :name, :company, :email, :phone, :comments
validates_presence_of :name
validates_presence_of :email
validates_presence_of :phone
def initialize(hsh = {})
hsh.each do |key, value|
self.send(:"#{key}=", value)
end
end
end
me gusta esto porque se puede escribir el controlador de mucho misma forma que un objeto ActiveRecord y no tener que muss para arriba con una gran cantidad de lógica para cuando se necesita para volver a mostrar el formulario.
Además, si está utilizando Formtastic u otro generador de formularios personalizado, puede usar este objeto con él, manteniendo fácilmente sus estilos de formulario existentes.
También he notado algunos comentarios en la web que dan a entender que las formas no-modelo son un dolor para validar, ese ser ¿sería más fácil usar un estilo de "forma para" para un formulario de contacto? – conspirisi
Echa un vistazo a la gema validable para una fácil validación de objetos que no son de base de datos. http://github.com/jnunemaker/validatable –
Para restaurar los valores de entrada en la validación fallida: http://stackoverflow.com/questions/4129229/rails-restoring-contents-of-non-model-form-that-uses- form-tag/24974457 # 24974457 –