簡體   English   中英

聯系表格,紅寶石,sinatra和haml

[英]Contact form in ruby, sinatra, and 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

如果有人可以使用此功能,您可能需要使用您的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並使用亞馬遜雲端。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM