2009-08-28 14 views

उत्तर

59

आप एक विशिष्ट मॉडल के लिए form_for का प्रयोग करेंगे,

<% form_for @person do |f| %> # you can use f here 

    First name: <%= f.text_field :first_name %> 
    Last name : <%= f.text_field :last_name %> 

<% end %> 

Form_tag बुनियादी रूप बनाने के लिए,

<%= form_tag '/person' do -%> 
    <%= text_field_tag "person", "first_name" %> 
<% end -%> 
53

form_for अपने पहले तर्क के रूप में, एक सक्रिय्रेकॉर्ड ऑब्जेक्ट पसंद करता है;

def new 
    @foo = Foo.new 
end 

यह भी ब्लॉक करने के लिए एक फार्म चर गुजरता है, तो यह है कि: यह आसानी से एक बनाने या संपादित प्रपत्र (एक 'नई' दृश्य में उपयोग करने के लिए आप नियंत्रक में एक खाली उदाहरण बनाना चाहिए की तरह है, बनाने के लिए अनुमति देता है आप प्रपत्र के भीतर ही मॉडल का नाम दोहराने की जरूरत नहीं है। यह पसंदीदा तरीका एक मॉडल से संबंधित प्रपत्र लिखने के लिए है।

form_tag सिर्फ एक फार्म टैग बना देता (और निश्चित रूप से चुपचाप एक antiforgery छिपी हुई फ़ील्ड तैयार form_for की तरह,) ; यह गैर-मॉडल रूपों के लिए सबसे अच्छा उपयोग किया जाता है (मैं वास्तव में केवल इसे सरल खोज फ़ॉर्म या पसंद के लिए उपयोग करता हूं)

इसी तरह, form_remote_for और form_remote_tag मॉडल से संबंधित रूपों के लिए उपयुक्त हैं और क्रमशः मॉडल संबंधित रूपों के लिए उपयुक्त नहीं हैं, लेकिन मानक http विधि (GET, POST ...) में समाप्त होने के बजाय, वे एक AJAX विधि को कॉल करते हैं। आप FormHelper और PrototypeHelper संदर्भ पन्नों में आनंद लेने के लिए

यह सब

और कहीं अधिक उपलब्ध हैं।

संपादित 2012-07-13

Prototype बहुत पहले rails से हटा दिया गया, और दूरदराज के रूपों पूरी तरह से बदल दिया है। form_for और form_tag दोनों के :remote विकल्प के साथ कृपया पहले लिंक का संदर्भ लें।

+0

दूसरा लिंक काम नहीं करता है। – WowBow

+1

@WowBow आप सही हैं; आखिरकार, यह जवाब काफी पुराना है, और लंबे समय से रेल से प्रोटोटाइप हटा दिया गया है। मैं अपना जवाब संपादित करूंगा। – giorgian

+0

इसका क्या अर्थ है कि 'form_for' "ActiveRecord ऑब्जेक्ट को पसंद करता है? – shiggity

4

ये समान होनी चाहिए:

<% form_for @person do |f| %> 
    <%= f.text_field :name %> 
<% end %> 

और:

<%= form_tag '/person' do %> 
    <%= text_field_tag "person[name]" %> 
<% end %> 

यदि आप नियंत्रक को समान पैरा सबमिट करना चाहते हैं, तो आपको इसे स्पष्ट रूप से परिभाषित करना होगा।

+0

लघु और सटीक। [सुंदर विस्तार] –

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