Frage

Ich bin neu auf alle drei, und ich versuche, ein einfaches Kontaktformular für eine Website zu schreiben. Der Code, den ich mit kommen haben, ist unten, aber ich weiß, gibt es einige grundlegende Probleme mit ihm (aufgrund meiner Unerfahrenheit mit sinatra). Jede Hilfe bei diesen Arbeiten immer geschätzt werden würde, kann ich nicht in der Dokumentation für diese Art der Sache, um herauszufinden / finden scheinen.

haml Code von der Kontaktseite:

%form{:name => "email", :id => "email", :action => "/contact", :method => "post", :enctype => "text/plain"}
  %fieldset
    %ol
      %li
        %label{:for => "message[name]"} Name:
        %input{:type => "text", :name => "message[name]", :class => "text"}
      %li
        %label{:for => "message[mail]"} Mail:
        %input{:type => "text", :name => "message[mail]", :class => "text"}
      %li
        %label{:for => "message[body]"} Message:
        %textarea{:name => "message[body]"}
    %input{:type => "submit", :value => "Send", :class => "button"}

Und hier ist mein Code in Sinatras app.rb:

require 'rubygems'
require 'sinatra'
require 'haml'
require 'pony'

    get '/' do
        haml :index
    end 

    get '/contact' do
        haml :contact
    end

    post '/contact' do
        name = #{params[:name]}
        mail = #{params[:mail]}
        body = #{params[:body]}     
        Pony.mail(:to => '*emailaddress*', :from => mail, :subject => 'art inquiry from' + name, :body => body) 
    end
War es hilfreich?

Lösung

ich es heraus für jemanden von euch fragen:

haml:

%form{ :action => "", :method => "post"}
  %fieldset
    %ol
      %li
        %label{:for => "name"} Name:
        %input{:type => "text", :name => "name", :class => "text"}
      %li
        %label{:for => "mail"} email:
        %input{:type => "text", :name => "mail", :class => "text"}
      %li
        %label{:for => "body"} Message:
        %textarea{:name => "body"}
    %input{:type => "submit", :value => "Send", :class => "button"}

Und die app.rb:

post '/contact' do
        name = params[:name]
        mail = params[:mail]
        body = params[:body]

        Pony.mail(:to => '*emailaddress*', :from => "#{mail}", :subject => "art inquiry from #{name}", :body => "#{body}")

        haml :contact
    end

Andere Tipps

Falls jemand diese verwenden kann, ist hier, was Sie vielleicht Ihr Google Mail-Konto zu senden Mail verwenden müssen.

post '/contact' do 
require 'pony'
Pony.mail(
   :name => params[:name],
  :mail => params[:mail],
  :body => params[:body],
  :to => 'a_lumbee@gmail.com',
  :subject => params[:name] + " has contacted you",
  :body => params[:message],
  :port => '587',
  :via => :smtp,
  :via_options => { 
    :address              => 'smtp.gmail.com', 
    :port                 => '587', 
    :enable_starttls_auto => true, 
    :user_name            => 'lumbee', 
    :password             => 'p@55w0rd', 
    :authentication       => :plain, 
    :domain               => 'localhost.localdomain'
  })
redirect '/success' 
end

Beachten Sie die Umleitung am Ende, so dass Sie ein success.haml, um den Benutzer anzuzeigen, benötigen, dass ihre E-Mail erfolgreich gesendet wurde.

Uhmm, habe ich versucht, in irb die folgende:

foo = #{23}

Natürlich ist es nicht funktionieren! die ‚#‘ ist für Kommentare in Ruby, wenn es in einem String vorkommt! Seine selbst kommentierte die in der Syntaxhervorhebung. Was Sie wollte, war:

name = "#{params[:name]}"

, wie Sie in Ihrer Lösung haben (was nicht notwendig ist, da es ohnehin schon ist ein String).

Btw, der Grund, warum der Code keinen Fehler werfen ist die folgende:

a =
b =
42

wird a und b bis 42 eingestellt Sie können sogar einige seltsame Dinge tun (wie Sie versehentlich getan haben) und legen Sie die Variablen auf den Rückgabewert einer Funktion, die diese Variablen als Parameter verwendet:

def foo(a,b)
    puts "#{a.nil?} #{b.nil?}" #outputs 'true true'
    return 42
end
a =
b =
foo(a,b)

wird a und b auf 42 festgelegt.

# {} ist Interpolation, die verwendet innen ist "". indem es nur außerhalb für eine variable Zuordnung wird nicht funktionieren.

Es wäre eher wie folgt verwendet werden:

number_of_people = 15 

Puts "There are #{number_of_people} scheduled tonight" 

Ich habe ein Beispiel dafür in zwei Teilen geschaffen, die auf Github verfügbar sind. Das Anmeldeformular App ist hier: Anmelde-form-Heroku und ein Beispiel für die statische Website dass in Wechselwirkung mit dieser ist hier: statisch-Website-to-s3-Beispiel . Das Formular App wird mit Sinatra gebaut und ist bereit, direkt auf Heroku einzusetzen. Die statische Seite ist bereit, direkt auf S3 und Amazon Cloudfront Einsatz bereitstellen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top