ルビー、シナトラ、およびHAMLでお問い合わせフォーム
質問
私はすべての3つの新たなんだ、と私は、ウェブサイトのためのシンプルなお問い合わせフォームを作成しようとしています。私が出ているコードは以下ですが、私は(シナトラとの私の経験不足のために)それにいくつかの根本的な問題があることを知っています。この作業を得ることで任意のヘルプは、私はこの種のもののためのドキュメントを見つける/見つけ出すように見えることはできません、いただければ幸いです。
お問い合わせページから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"}
そして、ここではシナトラの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
(あなたが誤っていたとして)あなたも、いくつかの奇妙なことを行うことができます42にaとbを設定し、パラメータとしてこれらの変数を取る関数の戻り値に変数を設定します。
def foo(a,b)
puts "#{a.nil?} #{b.nil?}" #outputs 'true true'
return 42
end
a =
b =
foo(a,b)
42にし、Bを設定します。
#{} "は、" 内部で使用される補間です。ただ、変数の代入のために外にそれを使用することはできません。
このように使用される可能性が高いでしょう。
number_of_people = 15
Puts "There are #{number_of_people} scheduled tonight"
私はgithubの上で利用可能である二つの部分にこの例を作成しました。サインアップフォームのアプリはここにある:サインアップ・フォームHerokuのと静的なウェブサイトの例これはここにあるとそれが相互作用:静的WebサイトツーS3-例。 フォームアプリはシナトラを使用して構築し、Herokuの上にまっすぐに展開する準備ができています。静的なサイトはS3にまっすぐ展開とAmazon CloudFrontをを使用する準備ができています。