2011-06-26 11 views
8

के साथ बटन की तरह सरल/विपरीत बटन मेरे पास एक उत्पाद, उपयोगकर्ता और मॉडल है। एक उपयोगकर्ता एक उत्पाद पसंद कर सकते हैं। मैं एक साधारण बटन को लागू करने की कोशिश कर रहा हूं, जो एक क्लिक पर, उपयोगकर्ता को उत्पाद पसंद करने की अनुमति देता है। फिर जैसे बटन एक विपरीत बटन में बदल जाता है, जिससे उपयोगकर्ता किसी उत्पाद के विपरीत हो जाता है। बहुत सीधा।रेल 3, jquery, और AJAX

मैंने उपर्युक्त के लिए मॉडल/नियंत्रक तर्क लागू किया है। मैं जावास्क्रिप्ट/AJAX के साथ बहुत अच्छा नहीं हूं और यह सोच रहा था कि उपर्युक्त कार्यक्षमता को लागू करने का सबसे अच्छा तरीका क्या होगा। मैं AJAX के माध्यम से क्रियाओं को पसंद/विपरीत करना चाहता हूं। मैं अपने ऐप के लिए रेल 3 और jquery ujs का उपयोग कर रहा हूँ।

धन्यवाद।

उत्तर

36

आपके प्रश्न का मेरा उत्तर लंबा है, इसलिए मैंने example application लिखा। यहां एक स्निपेट है:

इस बिल्ली को त्वचा के कई तरीके हैं, लेकिन मुझे आंशिक और एकल यूजे टेम्पलेट प्रस्तुत करना पसंद है।

_like_button.html.erb:

<% if like = current_user.likes.find_by_product_id(@product.id) %> 
    <%= form_for like, :html => { :method => :delete }, 
        :remote => true do |f| %> 
    <%= f.submit "Unlike" %> 
    <% end %> 
<% else %> 
    <%= form_for current_user.likes.build(:product_id => @product.id), :remote => true do |f| %> 
    <%= f.hidden_field :product_id %> 
    <%= f.hidden_field :user_id %> 
    <%= f.submit "Like" %> 
    <% end %> 
<% end %> 

toggle.js.erb, जहां "#like" div प्रपत्र संलग्न है:

$("#like").html("<%= escape_javascript render('like_button') %>"); 
+1

यार, इसकी तो भयानक आप इस किया था कि। आपके नमूना ऐप ने वास्तव में मुझे यह समझने में मदद की कि यह कैसे काम करता है। एक टन Thx! – p01nd3xt3r

+0

आपके तरह के शब्दों के लिए धन्यवाद! – dwhalen

+1

@dwhalen, मुझे अब जुड़े हुए नमूना एप्लिकेशन नहीं मिल रहे हैं। मैं अपने ऐप में एक ही काम करने की कोशिश कर रहा हूं, और मेरे आवेदन में लगभग समान कोड है। सबकुछ के आसपास पहली बार ठीक काम करता है, जैसे बटन दिखाता है, और इसे क्लिक करने पर, यह विपरीत होने के लिए टॉगल करता है। हालांकि, जब मैं विपरीत बटन पर क्लिक करने का प्रयास करता हूं, तो कुछ भी नहीं होता है। कोई सुझाव? – Anand

1

असल में, अपने लिंक AJAX के माध्यम से काम करने के लिए, आपको :remote => true तर्क के साथ link_to प्रदान करने की आवश्यकता है। लेकिन मुझे लगता है कि आप उपयोगकर्ता को कुछ प्रकार की फीडबैक बनाना चाहते हैं। this स्क्रीनकास्ट पर एक नज़र डालें।