text_field rails method form_with form_for form fields_for example ruby-on-rails forms

ruby on rails - rails - ¿Cómo hacer una forma no modelo en rubí sobre raíles?



select form rails (5)

Estoy tratando de hacer un formulario que no sea de modelo en ruby ​​on rails, la mayoría de los ejemplos que puedo encontrar solo tienen un campo (por ejemplo, un campo de búsqueda) o usar una forma antigua de escribir un formulario como este. Un formulario de correo electrónico con Ruby en Carriles

Si alguien pudiera mostrarme el código de ejemplo de un formulario no modelo con, por ejemplo, dos campos para la vista y cómo accedo a esos campos en el controlador, se lo agradecería.

Muchas gracias.




Necesitará los métodos de FormHelper :

Digamos que quieres una acción de test simple que se someta a la acción do_test :

Una vista simple para la acción de prueba (posts / test.html.erb):

<% form_tag ''/posts/do_test'' do %> <%=label_tag ''name'' %> <%=text_field_tag ''name''%> <%=label_tag ''phone'' %> <%=text_field_tag ''phone''%> <div><%= submit_tag ''Save'' %></div> <% end -%>

En el controlador de mensajes:

def test end def do_test name = params[:name] phone = params[:phone] # do whatever you want... end

También necesita agregar estas 2 acciones a las rutas en config / route.rb

map.resources :posts, :collection=>{:test => :get, :do_test => :post}



Si creas una clase para representar tu objeto (Llamémoslo ContactInfo ), puedes definir métodos en esa clase, luego usarlos usando los ayudantes del creador de formularios de Rails estándar.

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 tu forma:

<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 ahora, ¿a quién le importa?

Sin embargo, agregue la github.com/jnunemaker/validatable , ¡y tiene una razón real para hacer esto! Ahora puedes tener mensajes de validación como un modelo real.

Echa un vistazo a mi clase ContactInfo completa:

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 puede escribir su controlador de la misma manera que un objeto ActiveRecord y no tener que mezclarlo con mucha lógica para cuando necesite volver a mostrar el formulario.

Además, si está utilizando Formtastic u otro creador de formularios personalizado, puede usar este objeto con él, manteniendo fácilmente sus estilos de formulario existentes.