2016-04-28 6 views
0

Ich versuche, ein Kontaktformular in einer einseitigen Webseite mit mail_form zu setzen. Jedoch finde ich es schwierig, den Anweisungen zu folgen, da sie annehmen, dass ich eine Ansicht speziell für das Formular habe, aber in meinem Fall ist alles in einem Controller visitors_controller.Schienen, Kontaktformular in einer einzigen Seite

class ContactsController < ApplicationController 
def new 
    @contact = Contact.new 
    end 

def create 
    @contact = Contact.new(params[:contact]) 
    @contact.request = request 
    if @contact.deliver 
     flash.now[:notice] = 'Thank you for your message. We will contact you soon!' 
    else 
     flash.now[:error] = 'Cannot send message.' 
     render :new 
    end 
    end 

end 

Und die Aussicht würde wie folgt aussehen:

<%= simple_form_for @contact, html: {class: 'form-horizontal' } do |f| %> 
    <%= f.input :name, :required => true %> 
    <%= f.input :email, :required => true %> 
    <%= f.input :message, :as => :text, :required => true %> 
    <div class= "hidden"> 
     <%= f.input :nickname, :hint => 'Leave this field blank!' %> 
    </div> 
     <%= f.button :submit, 'Send message', :class=> "btn btn-primary" %> 
    <% end %> 

Wie erreicht man das gleiche in meinem visitors_controller und sehen Nach den Anweisungen, sollte es einen Controller wie folgt aussehen werden? Der Controller zur Zeit wie folgt aussieht, wenn es wichtig ist,

class VisitorsController < ApplicationController 
    def index 
    end 
end 

Antwort

1

Am Ende des Tages, es ist nur eine Form, nichts Besonderes. Sie müssen nur das Formular angeben, wo Sie POST eingeben und es in einem Ziel behandeln. Standardmäßig würde es auf einen separaten Controller gepostet, aber das ist nicht notwendig, nur am einfachsten.

Um anderswo zu veröffentlichen, würde es wie jedes andere Formular funktionieren, das an eine bestimmte URL sendet.

Zuerst müssen Sie die URL erstellen.

config/routes.rb:

resources :visitors do 
    post :contact, on: :collection 
end 

Dies wird eine Route contact_visitors_path zu Ihrer Anwendung hinzufügen. Dies ist das Ziel, an das Ihr Formular POST sendet.

Dann fügen Sie Unterstützung für diese Strecke in visitors_controller:

def contact 
    @contact = Contact.new(params[:contact]) 
    @contact.request = request 
    if @contact.deliver 
    flash.now[:notice] = 'Thank you for your message. We will contact you soon!' 
    redirect_to visitors_path # Go back to the index page 
    else 
    flash.now[:error] = 'Cannot send message.' 
    render :index # Instead of :new, as we submit from :index 
    end 
end 

Als Nächstes fügen Sie Unterstützung für diese Form auf der Indexseite (der Seite der Form, wie "neu" im Beispiel erscheint):

def index 
    @contact = Contact.new 
end 

Schließlich müssen Sie nur das Formular sagen, wo zu posten.

= simple_form_for @contact, url: contact_visitors_path, html: {class: 'form-horizontal' } 

Nun wird die Form der auf Ihre visitors_controller, und indem Sie Ihre eigene Methode behandelt werden. Alles andere funktioniert gleich.

+0

danke! es funktionierte –

Verwandte Themen