2009-12-15 21 views
18

मैं, उदाहरण के सबसे मैं पा सकते हैं रेल पर रूबी में एक गैर-मॉडल प्रपत्र बनाने के लिए कोशिश कर रहा हूँ केवल एक क्षेत्र है (जैसे कि एक खोज फ़ील्ड) या इस An Email Form with Ruby on Railsरेल पर रूबी में गैर-मॉडल फॉर्म कैसे करें?

कुछ ऐसे स्वरूप लेखन के पुराने तरीके का उपयोग

यदि कोई मुझे दृश्य के लिए दो फ़ील्ड कहने के साथ एक गैर-मॉडल फ़ॉर्म का उदाहरण कोड दिखा सकता है और मैं नियंत्रक में उन फ़ील्ड तक कैसे पहुंचूं, तो मैं आभारी रहूंगा।

बहुत बहुत धन्यवाद।

+0

उपयोग कर सकते हैं मैं भी जिसका अर्थ है कि गैर मॉडल रूपों को मान्य करने के लिए एक दर्द, कि किया जा रहा है कर रहे हैं वेब के आसपास कुछ टिप्पणियों पर गौर किया एक संपर्क फ़ॉर्म के लिए "फॉर्म के लिए" शैली का उपयोग करना आसान होगा? – conspirisi

+0

गैर-डेटाबेस ऑब्जेक्ट्स के आसान सत्यापन के लिए मान्य करने योग्य मणि देखें। http://github.com/jnunemaker/validatable –

+0

विफल सत्यापन पर इनपुट मानों को पुनर्स्थापित करने के लिए: http://stackoverflow.com/questions/4129229/rails-restoring-contents-of-non-model-form-that-uses- फॉर्म-टैग/24 9 74457 # 24 9 74457 –

उत्तर

32

आप FormHelper तरीकों की आवश्यकता होगी:

परीक्षण कार्रवाई (पोस्ट/test.html.erb) के लिए एक सरल दृश्य:

आप एक सरल test कार्रवाई कि do_test कार्रवाई करने के लिए प्रस्तुत करना चाहता हूँ कहो

<% form_tag '/posts/do_test' do %> 
    <%=label_tag 'name' %> 
    <%=text_field_tag 'name'%> 

    <%=label_tag 'phone' %> 
    <%=text_field_tag 'phone'%> 

    <div><%= submit_tag 'Save' %></div> 
<% end -%> 

पदों नियंत्रक में:

def test 
end 

def do_test 
    name = params[:name] 
    phone = params[:phone] 
    # do whatever you want... 
end 

इसके अलावा, आप आप एक वर्ग अपने वस्तु का प्रतिनिधित्व करने के बनाते हैं config/routes.rb

map.resources :posts, :collection=>{:test => :get, :do_test => :post} 
+0

अच्छा लग रहा है, मैं इसे आजमा रहा हूं ... – conspirisi

0

क्या आपने एक प्रस्तुतकर्ता का उपयोग करने के बारे में सोचा है?

http://blog.jayfields.com/2007/03/rails-presenter-pattern.html

+0

धन्यवाद, लेकिन यह कट्टर दिखता है, मैं सिर्फ एक नौसिखिया हूं, मैं कोशिश कर सकता हूं कि अगर मैं रेल की निंजा बन जाऊं। – conspirisi

+0

एक प्रस्तुति वास्तव में एक शुरुआती के लिए भी मॉडल के लिए सीधे बाध्य न होने वाले रूपों का प्रतिनिधित्व करने के लिए पालन करने के लिए एक बहुत अच्छा पैटर्न है। – yagooar

5

में मार्गों के लिए इन 2 कार्यों जोड़ने की जरूरत है आप, तो उस वर्ग पर तरीकों को परिभाषित कर सकते (यह ContactInfo कहते हैं) मानक रेल फॉर्म निर्माता निर्माता का उपयोग करके उनका उपयोग करें।

class ContactInfo 
    attr_accessor :name, :company, :email, :phone, :comments 

    def initialize(hsh = {}) 
    hsh.each do |key, value| 
     self.send(:"#{key}=", value) 
    end 
    end 
end 

और अपने रूप में:

<h2>Contact Us</h2> 
<% form_for(@contact_info, :url => path_for_your_controller_that_handles_this, :html => {:method => :post}) do |f| %> 

    <%= f.label :name %> 
    <%= f.text_field :name %> 

    ... 
<% end %> 

अब तक, कौन सही परवाह करता है?

हालांकि, validatable gem में जोड़ें, और आपको यह करने के लिए वास्तविक कारण मिला है! अब आपके पास असली मॉडल की तरह सत्यापन संदेश हो सकते हैं।

चेक बाहर मेरी पूरा ContactInfo वर्ग:

class ContactInfo 
    include Validatable 

    attr_accessor :name, :company, :email, :phone, :comments 

    validates_presence_of :name 
    validates_presence_of :email 
    validates_presence_of :phone 

    def initialize(hsh = {}) 
    hsh.each do |key, value| 
     self.send(:"#{key}=", value) 
    end 
    end 
end 

मुझे यह पसंद है क्योंकि आप जब आप की जरूरत के लिए तर्क का एक बहुत साथ यह अव्यवस्था के लिए है एक ActiveRecord वस्तु के रूप में अपने नियंत्रक ठीक वैसे ही लिख सकते हैं और नहीं कर सकते फॉर्म को फिर से प्रदर्शित करने के लिए।

प्लस, यदि आप फॉर्मेटास्टिक या किसी अन्य कस्टम फॉर्म बिल्डर का उपयोग कर रहे हैं, तो आप इस ऑब्जेक्ट का उपयोग अपने मौजूदा फॉर्म शैलियों को आसानी से रखते हुए कर सकते हैं।

+0

धन्यवाद, मैं इसे जल्द ही देखूंगा, कुछ समय बाद ... – conspirisi

संबंधित मुद्दे