2010-01-14 33 views
28

我是所有三個新手,我試圖寫一個簡單的網站聯繫表格。我提出的代碼如下,但我知道它有一些基本問題(由於我對sinatra沒有經驗)。任何幫助獲得這項工作將不勝感激,我似乎無法弄清楚/找到這種事情的文件。從聯繫人頁面在紅寶石,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 
+0

哪裏的了'GET'和你得到了什麼錯誤? 另外,消息[郵件]的命名是什麼?爲什麼不只是「郵件」? – 2010-01-14 23:24:02

回答

44

我想它對於任何你想知道:

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"} 

An d的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 
+0

謝謝,正是我一直在尋找的! – mmr 2010-01-22 23:53:33

+1

有關標籤中「for」屬性的響應中的小錯誤: 「此屬性明確將定義的標籤與另一個控件關聯。存在時,此屬性的值必須與某些屬性的值相同其他控件放在同一個文檔中,當缺失時,被定義的標籤與元素的內容相關聯。「 - http://www.w3.org/TR/html401/interact/forms.html#h-17.9.1 – abernier 2010-02-24 09:58:08

3

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

4

如果任何人都可以利用這一點,這裏是你migh什麼您需要使用您的Gmail帳戶發送郵件。

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    => '[email protected]', 
    :authentication  => :plain, 
    :domain    => 'localhost.localdomain' 
    }) 
redirect '/success' 
end 

注意重定向到了最後,所以你需要一個success.haml以告知他們的電子郵件成功發送給用戶。

0

我已經在github上提供了兩個部分創建了這個示例。註冊表單應用程序位於:signup-form-heroku,與此交互的靜態網站示例如下:static-website-to-s3-example。 表單應用程序使用Sinatra構建,並準備直接部署到Heroku上。靜態網站已準備好直接部署到S3並使用amazon cloudfront。

1

#{}是在「」中使用的插值。只是在外部使用它來進行變量賦值是行不通的。

這將是更可能像這樣使用:

number_of_people = 15 

Puts "There are #{number_of_people} scheduled tonight"