30

私は3つすべてに不慣れで、Webサイトの簡単な連絡フォームを作成しようとしています。私が思いついたコードは以下のとおりですが、いくつかの根本的な問題があることを知っています(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
4

5 に答える 5

46

疑問に思っている人のために私はそれを理解しました:

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
于 2010-01-15T02:42:54.347 に答える
6

誰でもこれを使用できる場合は、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が必要になります。

于 2011-11-30T00:45:49.673 に答える
5

うーん、私は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に設定します。

于 2011-07-12T23:12:41.543 に答える
2

#{}は、""内で使用される補間です。変数の割り当てのために外部で使用するだけでは機能しません。

次のように使用される可能性が高くなります。

number_of_people = 15 

Puts "There are #{number_of_people} scheduled tonight" 
于 2016-05-12T00:41:28.190 に答える
0

githubで利用できる2つの部分でこの例を作成しました。サインアップフォームアプリはここにあります:signup-form-herokuとこれと相互作用する静的ウェブサイトの例はここにあります:static-website-to-s3-example。フォームアプリはSinatraを使用して構築されており、Herokuに直接デプロイする準備ができています。静的サイトは、S3に直接デプロイして、amazoncloudfrontを使用する準備ができています。

于 2015-12-01T08:00:15.597 に答える