2010-01-14 18 views
28

में संपर्क फ़ॉर्म मैं तीनों के लिए नया हूं, और मैं वेबसाइट के लिए एक साधारण संपर्क फ़ॉर्म लिखने की कोशिश कर रहा हूं। जिस कोड के साथ मैं आया हूं वह नीचे है, लेकिन मुझे पता है कि इसमें कुछ मौलिक समस्याएं हैं (सिनात्रा के साथ मेरे अनुभवहीनता के कारण)। इस काम को पाने में कोई मदद की सराहना की जाएगी, मुझे इस तरह की चीज़ों के लिए प्रलेखन को समझने/ढूंढने की प्रतीत नहीं हो रही है। संपर्क पृष्ठ सेरूबी, सीनात्रा, और हैमल

haml कोड:

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' और क्या त्रुटि आप मिलता है है? इसके अलावा, संदेश [मेल] नामकरण के साथ क्या हो रहा है? क्यों न सिर्फ "मेल"? –

उत्तर

44

मैं इसे आप में से किसी के लिए पता लगा सोच:

%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 में मेरी कोड है हैमल:

%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 
+0

धन्यवाद, बस जो मैं खोज रहा हूं! – mmr

+1

लेबल में 'फॉर' विशेषता के बारे में इस प्रतिक्रिया में छोटी त्रुटि: "यह विशेषता स्पष्ट रूप से लेबल को किसी अन्य नियंत्रण से परिभाषित करती है। वर्तमान में, इस विशेषता का मान कुछ की आईडी विशेषता के मान के समान होना चाहिए एक ही दस्तावेज़ में अन्य नियंत्रण। अनुपस्थित होने पर, लेबल परिभाषित किया गया तत्व तत्व की सामग्री से जुड़ा हुआ है। " - http://www.w3.org/TR/html401/interact/forms.html#h-17.9.1 – abernier

3

uhmm, मैं निम्नलिखित आईआरबी में करने की कोशिश की:

foo = #{23} 

बेशक यह अभ्यस्त काम करते हैं! रूबी में टिप्पणियों के लिए '#' है, यह एक स्ट्रिंग में होता है! सिंटैक्स हाइलाइटिंग में भी इसकी टिप्पणी की गई। क्या आप चाहते थे:

name = "#{params[:name]}" 

रूप में आप अपने समाधान में किया था (जो, आवश्यक नहीं है के रूप में यह पहले से ही एक स्ट्रिंग है)।

a = 
b = 
42 

42. करने के लिए ए और बी सेट हो जाएगा तुम भी कुछ अजीब कर सकते हैं (जैसा कि आप गलती से किया था) और सेट:

Btw, कारण है कि कोड एक त्रुटि फेंक नहीं है पीछा कर रहा है जो पैरामीटर के रूप में इन चरों लेता है एक समारोह के रिटर्न मान पर चर: 42

4

के मामले किसी को भी, यहां

def foo(a,b) 
    puts "#{a.nil?} #{b.nil?}" #outputs 'true true' 
    return 42 
end 
a = 
b = 
foo(a,b) 

एक सेट हो जाएगा और ख इस का उपयोग कर सकते हैं क्या migh है मेल भेजने के लिए अपने जीमेल खाते का उपयोग करने की आवश्यकता नहीं है।

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

मैंने गिटूब पर उपलब्ध दो हिस्सों में इसका एक उदाहरण बनाया है। साइनअप फॉर्म ऐप यहां है: signup-form-heroku और स्थिर वेबसाइट का एक उदाहरण जो इसके साथ इंटरैक्ट करता है यहां है: static-website-to-s3-example। फॉर्म ऐप सिनात्रा का उपयोग करके बनाया गया है और सीधे हेरोोकू पर तैनात करने के लिए तैयार है। स्थैतिक साइट सीधे S3 पर तैनात करने के लिए तैयार है और अमेज़ॅन क्लाउडफ़्रंट का उपयोग करें।

1

# {} इंटरपोलेशन है जिसका प्रयोग "" के अंदर किया जाता है। एक वैरिएबल असाइनमेंट के लिए बस इसका उपयोग करना काम नहीं करेगा।

इसे और अधिक इस तरह इस्तेमाल किया जा की संभावना होगी:

number_of_people = 15 

Puts "There are #{number_of_people} scheduled tonight" 
संबंधित मुद्दे