2009-11-25 8 views
6

Manchmal brauchen wir Formular ohne Modell-Erstellung - zum Beispiel Suchfeld oder E-Mail, wo einige Anweisungen gesendet werden sollten. Was ist der beste Weg, um diese Formulare zu erstellen? Kann ich ein virtuelles Modell oder etwas Ähnliches erstellen? Ich möchte formtastic verwenden, aber nicht form_tag.virtuelles Modell und form_for (oder formtastic)

Antwort

18

Erstens benötigt Formtastic nicht in allen Fällen ein Modell, obwohl es sicherlich am besten funktioniert und weniger Code mit einem Modell erfordert.

Genau wie Rails eigenen eingebauten form_for, können Sie ein Symbol anstelle eines Objekts als das erste Argument übergeben, und Formtastic wird das Formular erstellen und die Parameter basierend auf dem Symbol veröffentlichen. ZB:

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

Dies wird die Form Werte zur Verfügung zu Ihrem Controller als params[:session] machen.

Zweitens, ein Modell bedeutet kein ActiveRecord Modell. Was ich meine, ist, dass Formtastic mit jeder Instanz einer Klasse arbeitet, die wie ein ActiveRecord-Modell quakt. Ein klassisches Beispiel dafür sind viele Leute verwenden Authlogic für die Authentifizierung mit Formtastic. Ein Teil Authlogic ist die Idee eines Usersession-Modell, das gut funktioniert:

Controller:

def index 
    @user_session = UserSession.new 
end 

Form:

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

Dies wird Ihre Formulardaten in Ihrem Controller als params[:user_session] machen.

Es ist wirklich nicht so schwer, eine Modellinstanz zu erstellen, um die Sorgen Ihres Modells abzuschließen. Setzen Sie einfach die Methoden fort, die Formtastic erwartet, bis Sie es zum Laufen bringen!

+1

Ich akzeptiere deine Herausforderung!Hier finden Sie eine Nicht-ActiveRecord-Klasse, um die Probleme Ihres Modells zu beheben. http://dondoh.tumblr.com/post/4142258573/formtastic-without-activerecord – dondo

-1

Oder Sie erstellen einfach ein Formular mit form_for und lassen die Modellreferenz leer. zum Beispiel <% form_for "", :url=>some_url do |f| %> <%= f.text_field "some_attribute" %> <%= submit_tag "submit" %>

Sie die Werte durch ein einfaches params holen kann [: some_attribute] in dem Controller.

+0

Ich würde mich über einen Kommentar zur Abstimmung unten freuen. – Sid

+1

Ich würde sagen, das liegt daran, dass OP eine semantische Lösung sucht, idealerweise mit Formtastic, und Sie schlagen einen Rückschritt vor. –

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 %> 

ich AJAX verwendet, um die Form zu schreiben, wenn der Wert geändert.