2011-02-15 6 views
14

रेल 3 में, क्या यह एक फॉर्म_ बनाना संभव है जो नए, अद्यतन और क्रियाओं को संपादित करने के लिए काम करता है?नए, अपडेट और संपादित करने के लिए एक एकल form_for कैसे काम कर सकता है?

यदि हां, तो मैं यह कैसे कर सकता हूं?

मैं तो मेरे यूआरएल की तरह लग रहे एक व्यवस्थापक अनुभाग है:

/admin/posts/ {new,update, edit} 

उत्तर

19

बनाने के लिए भेजा जाना है क्योंकि नए जरूरत है, और संपादित एक भी form_for काम नहीं करेगा अद्यतन करने के लिए भेजे जाने की आवश्यकता .. जब तक (जो मैं जरूरी अनुशंसा नहीं करते) आप

form_for(@post, :url => (@post.new_record? ? admin_posts_url : admin_post_url(@post))) 

पैरामीटर form_form में एक तृतीयक ऑपरेटर जगह क्योंकि अपने नए कार्रवाई में आप Post.new जो एक शून्य आईडी के साथ एक वस्तु बनाता है करने के लिए जा रहे हैं, और अपनी आपके पास कार्रवाई संपादित करें Post.find (पैरामीटर [: id])

+10

के बजाय '@ post.id.nil? ', मैं '@post.new_record पसंद करूंगा ? – Chirantan

+0

मैं मानता हूं कि यह बहुत हैकी लगता है ताकि आप इसकी अनुशंसा न करें। लेकिन हम डिफ़ॉल्ट form_for व्यवहार को अनुकरण कैसे कर सकते हैं जो किसी ऑब्जेक्ट को संपादित करते समय और जब संसाधन और समर्पित नियंत्रक का उपयोग किए बिना हमेशा अलग होगा। ऐसा कुछ होना चाहिए ': url => {: create => {: action =>' ',: नियंत्रक =>' '},: अद्यतन => {: action =>' ',: नियंत्रक =>' ' }}, क्या यह नहीं होना चाहिए? –

+0

'@ post.new_record? 'के बजाय, मैं' @ post.persisted 'पसंद करूंगा? Http://api.rubyonrails.org/classes/ActiveRecord/Persistence.html#method-i-persisted-3F –

29

बस जाने form_for संभाल यह:

http://api.rubyonrails.org/classes/ActionView/Helpers/FormHelper.html#method-i-form_for-label-Resource-oriented+style

नियंत्रक:

class ControllerName 
    def new 
    @post = Post.new 
    end 
    def edit 
    @post = Post.find params[:id] 
    end 
end 

दृश्य:

<%= form_for [:admin, @post] do |f| %> 
<% end %> 
+0

यह है जवाब मैं एक लंबे समय के लिए देख रहा था। धन्यवाद दोस्त! –

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