2011-08-01 11 views
7

मैंने उपयोगकर्ता पोस्ट (नेस्टेड संसाधन, स्पष्ट रूप से) पर पूछताछ की है और अलग-अलग उपयोगकर्ताओं की पोस्ट की लंबी सूची है। मैं चाहता हूं कि उपयोगकर्ता एजेक्स के माध्यम से उस विशेष पोस्ट को पसंदीदा बनाने के लिए प्रत्येक पोस्ट के बगल में एक छोटे से स्टार पर क्लिक करने में सक्षम हो। इसे कैसे प्राप्त करें इस पर कोई सुझाव? जिस समस्या में मैं चल रहा हूं वह एक पृष्ठ पर कई पसंदीदा बटन है, जो कई पोस्टों का अनुकूलन करता है।उपयोगकर्ता पोस्ट के लिए AJAX FAV बटन

यह जीमेल की तरह है जैसे जीमेल अपने इनबॉक्स में पसंदीदा ईमेल के साथ करता है। दरअसल, यह बिल्कुल वैसा ही है।

उत्तर

10

सबसे पहले आपको इसे संभालने के लिए डेटाबेस सेट अप करने की आवश्यकता है, व्यक्तिगत रूप से मैं has_many के साथ जाऊंगा: एसोसिएशन के माध्यम से क्योंकि यह has_and_belongs_to_many पर अधिक लचीलापन प्रदान करता है। पसंद, हालांकि, आप पर निर्भर है। मैं आपको एपीआई में विभिन्न प्रकारों को देखने और अपने लिए निर्णय लेने की सलाह देता हूं। यह उदाहरण has_many: के माध्यम से सौदा करेगा।

मॉडल

# user.rb (model) 
has_many :favorites 
has_many :posts, :through => :favorites 

# post.rb (model) 
has_many :favorites 
has_many :users, :through => :favorites 

# favorite.rb (model) 
belongs_to :user 
belongs_to :post 

नियंत्रक

# favorites_controller.rb 
def create 
    current_user.favorites.create(:post_id => params[:post_id]) 
    render :layout => false 
end 

मार्गों

match "favorites/:post_id" => "favorites#create", :as => :favorite 

jQuery

$(".favorite").click(function() { 
    var post_id = $(this).attr('id'); 
    $.ajax({ 
    type: "POST", 
    url: 'favorites/' + post_id, 
    success: function() { 
     // change image or something 
    } 
    }) 
}) 

नोट्स

यह चीजों की एक जोड़ी हो जाती है: का उपयोग करते हुए रेल 3, jQuery का उपयोग कर, प्रत्येक पसंदीदा आइकन पोस्ट आईडी के साथ एक एचटीएमएल आईडी है। ध्यान रखें कि मैंने कोड का परीक्षण नहीं किया है और मैंने इसे इस विंडो में लिखा है, इसलिए आपको शायद कुछ मामूली समस्याएं ठीक करनी होंगी, लेकिन आपको यह समझना चाहिए कि I आमतौर पर ऐसा करता है। दृश्य सामग्री और मैं आपको छोड़ दूंगा।

यदि कोई भी गलती दिखाता है तो कृपया इस पोस्ट को संपादित करने के लिए स्वतंत्र महसूस करें।

1

:remote => true के साथ प्रत्येक पसंदीदा बटन के लिए form_tag करें। पोस्ट की आईडी जोड़ें और वर्तमान में प्रत्येक फॉर्म के लिए छिपे हुए फ़ील्ड के रूप में उपयोगकर्ता में लॉग इन करें।

पसंदीदा स्थिति अपडेट करने के लिए आप एक आरजेएस व्यू लिख सकते हैं, जिसमें "पोस्ट को पसंदीदा" अपडेट करने के लिए jQuery को शामिल किया जाएगा।

कुछ इस तरह:

- for post in @posts 
    = form_tag toggle_favorite_post_path, :remote => true 
    = hidden_field_tag :post_id, post.id 
    = hidden_field_tag :user_id, current_user.id 
    - if Favorite.where(:post_id => post.id, :user_id => current_user.id).exists? # TODO: move this to model 
     = submit_tag "Add to favorites", :class => "favorite-post-button" 
    - else 
     = submit_tag "Remove from favorites", :class => "unfavorite-post-button" 

आप सीएसएस के साथ एक स्टार की एक छवि होने के लिए सबमिट बटन (रों) का रूप कस्टमाइज़ कर सकते हैं।

यदि आप एकाधिक पोस्ट चुनने का विकल्प प्रदान करना चाहते हैं और फिर उन्हें एक बार में पसंदीदा बनाना चाहते हैं, तो आपको इसे संभालने के लिए कस्टम जावास्क्रिप्ट लिखना होगा। "सभी चयनित पसंदीदा" बटन के लिए क्लिक हैंडलर पर, फिर उस हैंडलर के अंदर, चयनित सभी पोस्ट आईडी एकत्र करें, एक स्ट्रिंग में आईडी को क्रमबद्ध करें और उसे नियंत्रक को वापस भेजें।

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