2011-08-28 15 views
8

से नया रिकॉर्ड कैसे बनाते हैं, मैं एक 'टैग' कार्यक्षमता बनाने की कोशिश कर रहा हूं जो उपयोगकर्ता को उन वस्तुओं को "टैग" करने की अनुमति देता है जिनमें वे रुचि रखते हैं। यहाँ मेरी मॉडलरेल 3 - आप link_to

class tag 
    belongs_to :user 
    belongs_to :item 
end 

इसी डीबी तालिका आवश्यक :user_id और :item_id क्षेत्रों है।

:items की सूची में मुझे प्रत्येक :item के बगल में एक लिंक चाहिए जो उपयोगकर्ता को :item टैग करने की अनुमति देता है। चूंकि मुझे :user_id और :item_id पता है, इसलिए मैं एक नया :tag रिकॉर्ड बनाना चाहता हूं, आईडी फ़ील्ड सेट कर सकता हूं, और रिकॉर्ड सहेज सकता हूं - सभी उपयोगकर्ता हस्तक्षेप के बिना। मैं link_to के लिए निम्न कॉल करने की कोशिश की, लेकिन कोई रिकॉर्ड डेटाबेस में सहेजा गया है:

<%= link_to 'Tag it!', {:controller => "tracks", 
         :method => :post, 
         :action => "create"}, 
         :user_id => current_user.id, 
         :item_id => item.id %> 

(इस कोड को एक के भीतर है:। @item.each do |item| बयान, इसलिए item.id मान्य है)

यह link_to कॉल बनाता है यह यूआरएल:

http://localhost:3000/tags?method=post&tag_id=7&user_id=1 

जो डेटाबेस में Tag रिकॉर्ड नहीं बनाता है। यहाँ tags_controller

def create 
    @tag = Tag.new 
    @tag.user_id = params[:user_id] 
    @tag.tag_id = params[:tag_id] 
    @tag.save 
    end 

मैं बना सकते हैं और एक नया टैग रिकॉर्ड को बचाने के लिए LINK_TO कैसे प्राप्त कर सकते हैं में अपने :create कार्रवाई है?

उत्तर

14

तथ्य यह है कि जेनरेट किए गए यूआरएल में पैरामीटर के रूप में विधि का तात्पर्य है कि यह एक जीईटी कर रहा है और पोस्ट नहीं कर रहा है।

LINK_TO हस्ताक्षर आप का उपयोग करना चाहिए link_to(body, url_options = {}, html_options = {})

<%= link_to 'Tag it!', {:controller => "item", 
         :action => "create", 
         :user_id => current_user.id, 
         :item_id => item.id}, 
         :method => "post" %> 

है: विधि html_options को पारित किया जाना चाहिए और url_options को आराम। यह काम करना चाहिए।

+0

धन्यवाद! यह आपके फिक्स के साथ बढ़िया काम करता है। आपके उत्तर में link_to हस्ताक्षर दिखाते हुए वास्तव में मुझे यह समझने में मदद मिली कि क्या हो रहा था। बहुत सराहना की। –

+1

बस एक त्वरित टिप्पणी। Url_options हैश में नियंत्रक कुंजी का मान "आइटम" नहीं होना चाहिए "आइटम"। लिंक प्रदर्शित करने का प्रयास करते समय यह आपको एक्शनकंट्रोलर रूटिंग त्रुटि देगा। – icantbecool

+0

@dexter, क्या होता है यदि लिंक ऐप के बाहर है, जैसे ईमेल में, उदाहरण के लिए? मेरा उपयोग मामला आरएसवीपी के लिए है। मैं सीधे ईमेल लिंक से एक नया आरएसवीपी बनाना चाहता हूं, लेकिन मैं रीस्टफुल रहना चाहता हूं। – Mohamad

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