2009-11-25 13 views
6

veces necesitamos forma sin la creación del modelo - por ejemplo campo de búsqueda o correo electrónico, donde se deben enviar algunas instrucciones. ¿Cuál es la mejor manera de crear estos formularios? ¿Puedo crear un modelo virtual o algo así? Me gustaría usar formtastic, pero no form_tag.modelo virtual y form_for (o Formtastic)

Respuesta

18

En primer lugar, Formtastic no necesita un modelo en todos los casos, aunque ciertamente funciona mejor y requiere menos código con un modelo.

Al igual que Rails propio integrado en form_for, puede pasar en un símbolo en lugar de un objeto como primer argumento, y Formtastic va a construir la forma y publicar los parametros basado en el símbolo. Por ejemplo:

<% semantic_form_for(:session) do |f| %> 
    ... 
<% end %> 

Esto hará que los valores del formulario disponible para su controlador como params[:session].

En segundo lugar, un modelo no significa un modelo ActiveRecord. Lo que quiero decir es, Formtastic funciona con cualquier instancia de una clase que charlatanes como un modelo de ActiveRecord.

Un ejemplo clásico de esto es que muchas personas están utilizando Authlogic para la autenticación con Formtastic. Parte de Authlogic es la idea de un modelo UserSession, que funciona bien:

controlador:

def index 
    @user_session = UserSession.new 
end 

Forma:

<% semantic_form_for(@user_session) do |f| %> 
    <%= f.input :login %> 
    <%= f.input :password %> 
<% end %> 

Esto hará que los datos del formulario disponible en el controlador como params[:user_session].

Es Realmente No es tan difícil crear una instancia modelo para concluir las preocupaciones de su modelo. ¡Siga implementando los métodos que Formtastic espera hasta que lo haga funcionar!

+1

¡Acepto tu desafío!Aquí encontrará una clase que no sea ActiveRecord para "resumir las preocupaciones de su modelo". http://dondoh.tumblr.com/post/4142258573/formtastic-without-activerecord – dondo

-1

O simplemente crear un formulario con form_for y deja en blanco la referencia del modelo. por ejemplo <% form_for "", :url=>some_url do |f| %> <%= f.text_field "some_attribute" %> <%= submit_tag "submit" %>

Usted puede recuperar los valores por params simplemente diciendo: [some_attribute] en su controlador.

+0

le agradecería un comentario en el voto hacia abajo. – Sid

+1

Diría que es porque OP está buscando una solución semántica, idealmente usando Formtastic, y está sugiriendo un paso atrás. –

1

default_language.rb

 
class DefaultLanguage 
    attr_accessor :language_id 
end 

foo_controller.rb

 
    def index 
    @default_language = params[:default_language] || Language.find_by_name("English") 
    end 

index.erb

 
<% semantic_form_for @default_language do |form| %> 
    <% form.inputs :id => 'default_language' do %> 
     <%= form.input :id, 
     :as => :select, 
     :collection => @languages, 
     :required => false, 
     :label => "Primary Language:", 
     :include_blank => false %> 
    <% end %> 
    <% end %> 

Solía ​​AJAX para publicar el formulario cuando el valor cambiado.

Cuestiones relacionadas