Je suis nouveau pour les trois et j'essaye d'écrire un simple formulaire de contact pour un site web. Le code que j'ai proposé est ci-dessous, mais je sais qu'il pose certains problèmes fondamentaux (en raison de mon manque d'expérience avec Sinatra). Toute aide pour que cela fonctionne serait appréciée, je n'arrive pas à comprendre/trouver la documentation pour ce genre de chose.
code haml de la page de contact:
%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"}
Et voici mon code dans app.rb de sinatra:
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
Je l'ai compris pour tous ceux qui se demandaient:
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"}
Et l'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
Si cela peut être utilisé par tout le monde, voici ce dont vous pourriez avoir besoin pour utiliser votre compte Gmail pour envoyer un courrier.
post '/contact' do
require 'pony'
Pony.mail(
:name => params[:name],
:mail => params[:mail],
:body => params[:body],
:to => '[email protected]',
: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
Notez la redirection à la fin, vous aurez donc besoin d’un success.haml pour indiquer à l’utilisateur que son courrier électronique a été envoyé avec succès.
Uhmm, j'ai essayé dans irb ce qui suit:
foo = #{23}
Bien sûr ça ne marchera pas! le '#' est pour les commentaires dans Ruby SAUF s'il se produit dans une chaîne! Cela a même été commenté dans la coloration syntaxique… .. Ce que vous vouliez était:
name = "#{params[:name]}"
comme vous l'avez fait dans votre solution (ce qui n'est pas nécessaire, car il s'agit déjà d'une chaîne).
Btw, la raison pour laquelle le code ne génère pas d'erreur est la suivante:
a =
b =
42
définira a et b sur 42. Vous pouvez même faire des choses étranges (comme vous l'avez fait accidentellement) et définir les variables sur la valeur de retour d'une fonction qui prend ces variables en tant que paramètres:
def foo(a,b)
puts "#{a.nil?} #{b.nil?}" #outputs 'true true'
return 42
end
a =
b =
foo(a,b)
définira a et b sur 42.
# {} est l'interpolation utilisée dans "". Le fait de l'utiliser à l'extérieur pour une affectation de variable ne fonctionnera pas.
Il serait plus susceptible d'être utilisé comme ceci:
number_of_people = 15
Puts "There are #{number_of_people} scheduled tonight"
J'ai créé un exemple en deux parties disponible sur github. L'application de formulaire d'inscription est ici: signup-form-heroku et un exemple du site Web statique qui interagit avec ceci est ici: static-website-to-s3-example . L'application de formulaire est construit en utilisant Sinatra et est prêt à déployer directement sur Heroku. Le site statique est prêt à être déployé directement sur S3 et à utiliser Amazon cloudfront.