2010-01-13 10 views
6

निम्नलिखित तरीके form_for का उपयोग कर के बीच अंतर क्या है:के बीच अंतर: मॉडल और @model form_for में?

<% form_for @user do |f| %> 
    <%= f.label :name %>: 
    <%= f.text_field :name, :size => 40 %> 
    ... 
<% end %> 

और:

<% form_for :user, :url => {:action => 'create'} do |f| %> 
    <%= f.label :name %>: 
    <%= f.text_field :name, :size => 40 %> 
    ... 
<% end %> 

सिर्फ स्वचालित रूप से URL कार्यों के लिए CRUD तरीकों का उपयोग @user का उपयोग कर रहा है?

+0

डुप्लिकेट: http://stackoverflow.com/questions/1582695/ और http://stackoverflow.com/questions/957204/ –

उत्तर

4

यदि आप form_for एक आवृत्ति चर के बिना एक प्रतीक देते हैं तो यह एक ही नाम के साथ एक आवृत्ति चर के लिए दिखता है।

प्रलेखन कहते हैं:

उदाहरण के लिए, यदि @post एक मौजूदा रिकॉर्ड आप संपादित करना चाहते है

<% form_for @post do |f| %> 
    ... 
<% end %> 

की तरह कुछ के बराबर है:

<% form_for :post, @post, :url => post_path(@post), :html => { :method => :put, :class => "edit_post", :id => "edit_post_45" } do |f| %> 
    ... 
<% end %> 
7

यदि आप सिर्फ मॉडल उदाहरण देते हैं जैसे @user (अपना पहला उदाहरण के रूप में) एक कार्रवाई निर्दिष्ट किए बिना, स्वचालित रूप से रेल अपने फार्म के लिए उचित CRUD कार्रवाई का उपयोग करता है:

  • तो @user एक नया, सहेजा न User वस्तु है, प्रपत्र अपने create कार्रवाई को इंगित करेंगे।

  • तो @user एक मौजूदा User डेटाबेस से भरी हुई है, update कार्रवाई का उपयोग किया जाएगा।

यह लाभ है कि आप अपने रूपों के लिए :url पैरामीटर बदले बिना दोनों अपने edit और new दृश्यों के लिए समान रूप पुनः उपयोग कर सकते है।

सामान्य रूप से, API docs अधिक जानकारी प्रदान करता है।

+0

एपीआई दस्तावेज़ से आपकी व्याख्या मेरे लिए बहुत उपयोगी है .. +1 –

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