Formularz kontaktowy w ruby, sinatra i haml
Jestem nowy dla wszystkich trzech, i staram się napisać prosty formularz kontaktowy dla strony internetowej. Kod, który wymyśliłem, znajduje się poniżej, ale wiem, że są z nim podstawowe problemy (z powodu mojego braku doświadczenia z Sinatrą). Jakakolwiek pomoc w uzyskaniu tego działania byłaby mile widziana, nie mogę dowiedzieć się / znaleźć dokumentacji dla tego rodzaju rzeczy.
Kod Haml ze strony kontaktowej:
%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"}
A oto mój kod w aplikacji Sinatry.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
5 answers
Rozgryzłem to dla każdego z was zastanawiającego się:
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"}
I aplikacji.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
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-01-11 18:56:49
Jeśli ktoś może tego użyć, oto, czego możesz potrzebować, aby użyć konta gmail do wysyłania poczty.
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
Zwróć uwagę na przekierowanie na końcu, więc będziesz potrzebował sukcesu.haml, aby wskazać użytkownikowi, że jego e-mail został wysłany pomyślnie.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-11-30 00:45:49
Uhmm, próbowałem w irb:
foo = #{23}
Oczywiście, że nie zadziała! '#'jest dla komentarzy w Rubim, chyba że występuje w łańcuchu! Jego nawet skomentowane w podświetlanie składni. Czego chciałeś:
name = "#{params[:name]}"
Tak jak w Twoim rozwiązaniu(co nie jest konieczne, ponieważ jest już ciągiem znaków).
Btw, powodem, dla którego kod nie wyrzuca błędu jest:
a =
b =
42
Ustawi a i b na 42. Można nawet zrobić kilka dziwnych rzeczy (jak przypadkowo did) i ustawić zmienne na wartość zwracaną funkcji, która przyjmuje te zmienne jako parametry:
def foo(a,b)
puts "#{a.nil?} #{b.nil?}" #outputs 'true true'
return 42
end
a =
b =
foo(a,b)
Ustawi a i b na 42.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-07-13 09:49:21
# {} jest interpolacją używaną wewnątrz "". Samo użycie go na zewnątrz do przypisania zmiennej nie zadziała.
Byłoby bardziej prawdopodobne, aby być używane w ten sposób:
number_of_people = 15
Puts "There are #{number_of_people} scheduled tonight"
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-05-12 00:41:28
Stworzyłem przykład tego w dwóch częściach, który jest dostępny na GitHubie. Aplikacja signup form znajduje się tutaj: signup-form-heroku i przykład statycznej strony internetowej, która z nią współdziała, jest tutaj: static-website-to-S3-example . Aplikacja form została zbudowana przy użyciu Sinatry i jest gotowa do wdrożenia bezpośrednio na Heroku. Strona statyczna jest gotowa do wdrożenia bezpośrednio na S3 i korzystania z Amazon cloudfront.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-12-01 08:00:15