Form_for, form_tag के बीच अंतर?


80

Form_for और form_tag के बीच अंतर क्या है? क्या form_remote_for और form_remote_tag के लिए कुछ अलग है?

जवाबों:


63

आप किसी विशिष्ट मॉडल के लिए 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पसंद करते हैं, इसके पहले arg के रूप में, एक activerecord ऑब्जेक्ट; यह आसानी से एक बनाने या संपादित करने की अनुमति देता है ("नए" दृश्य में इसका उपयोग करने के लिए आपको नियंत्रक में एक खाली उदाहरण बनाना चाहिए, जैसे:

def new
  @foo = Foo.new
end

यह ब्लॉक के लिए एक फॉर्म चर भी देता है, ताकि आपको फॉर्म के भीतर मॉडल नाम को दोहराना न पड़े। यह मॉडल से संबंधित प्रपत्र लिखने का पसंदीदा तरीका है।

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

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

यह सब और कहीं अधिक आपके लिए फॉर्महेल्पर में आनंद लेने के लिए उपलब्ध हैं और प्रोटोटाइपहेलपर संदर्भ पृष्ठ।

EDIT 2012-07-13

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


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

इसका क्या मतलब है कि form_forActiveRecord ऑब्जेक्ट "पसंद" करता है?
शगुन

1
@ शालीनता: यह निश्चित रूप से एक प्रतीक या स्ट्रिंग को स्वीकार करता है। लेकिन एक ActiveRecord ऑब्जेक्ट को देखते हुए, यह सही काम करता है।
7:00 पर जियोर्निग ऑग

4

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

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

तथा:

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

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


छोटा और सटीक। [सुंदर अभिव्यक्ति]
डैनिश एब्सर
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.