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.
¿Has pensado en utilizar un presentador?
http://blog.jayfields.com/2007/03/rails-presenter-pattern.html
Desde Rails 4 puedes usar ActiveModel :: Modelo
http://blog.isnorcreative.com/2014/05/08/easier-non-activerecord-models-in-rails-4.html
class Contact
include ActiveModel::Model
attr_accessor :email, :message
validates :email, presence: true, length: {in:2..255}
end
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}
Puede usar ActionView :: Helpers :: FormTagHelper para uso sin modelo. Me gusta
form_tag
text_field_tag
hidden_field_tag
Api tiene muchos buenos ejemplos. http://api.rubyonrails.org/classes/ActionView/Helpers/FormTagHelper.html
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.