题
我是新来的所有三个,我试图写一个网站一个简单的接触形式。我想出的代码如下,但我知道它存在的一些基本问题(由于缺乏经验,我与西纳特拉)。在得到这个工作的任何帮助,将不胜感激,我似乎无法找出/找到这样的事情的文档。
从接触页面HAML代码:
%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"}
这是我的代码在Sinatra的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
解决方案
我计算出来为任何你想知道:
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"}
和所述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
其他提示
在情况下,任何人都可以利用这一点,这里是你可能需要使用您的Gmail帐户发送邮件的内容。
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
请注意在最后重定向,所以你需要一个success.haml以告知他们的电子邮件成功发送给用户。
Uhmm,我试图在IRB以下内容:
foo = #{23}
当然,它不会工作!以“#”是Ruby的意见,除非它在字符串中出现!它甚至在语法高亮注释掉。 你想要的是:
name = "#{params[:name]}"
,你在你的解决方案做了(这是没有必要的,因为它已经是一个字符串)。
顺便说一下,为什么代码不会引发错误的原因是:
a =
b =
42
将设置A和B 42.你甚至可以做一些奇怪的事情(如你不小心做了),并且变量设置为这需要这些变量作为参数的函数的返回值:
def foo(a,b)
puts "#{a.nil?} #{b.nil?}" #outputs 'true true'
return 42
end
a =
b =
foo(a,b)
将设置a和b 42。
#{}是内部 “使用的内插”。只是用它外面的变量赋值将无法正常工作。
这将是更可能这样被使用:
number_of_people = 15
Puts "There are #{number_of_people} scheduled tonight"
我创建两个部分可用在github这样的一个例子。注册表单应用程序是在这里:注册外形Heroku的和静态网站的一个例子进行交互与此是在这里:静态网站到S3-例如。 表单应用程序使用西纳特拉建成,并准备直接部署到Heroku的。静态站点准备直部署到S3和使用Amazon CloudFront的。
不隶属于 StackOverflow