联系表格,ruby,sinatra和haml

我是这三个人的新手,我正在尝试为网站写一个简单的联系表格。 我提出的代码如下,但我知道它存在一些基本问题(由于我对sinatra缺乏经验)。 得到这个工作的任何帮助将不胜感激,我似乎无法弄清楚/找到这类事情的文档。

来自联系页面的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 

如果有人可以使用此function,您可能需要使用您的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来向用户表明他们的电子邮件已成功发送。

嗯,我试着用以下方法:

 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上提供了两个部分的例子。 注册表单应用程序在这里: signup-form-heroku以及与此交互的静态网站示例如下: static-website-to-s3-example 。 表单应用程序是使用Sinatra构建的,可以直接部署到Heroku上。 静态站点已准备好直接部署到S3并使用亚马逊云端。