2012-02-23 22 views
5

के साथ रेल में एलिमेंट्स अपडेट करना ऐप उपयोगकर्ताओं को एम्बेडेड वीडियो पर वोट करने की अनुमति देता है। जब उपयोगकर्ता तीर ऊपर और नीचे क्लिक करते हैं, तो संपूर्ण पृष्ठ points को अपडेट करने के लिए रीफ्रेश होता है। मैं अब महीनों के लिए AJAX मतदान लागू करने का प्रयास कर रहा हूं। मैं सबसे सरल समाधान चाहता हूं जो आप पेशकश कर सकते हैं, भले ही यह सबसे कुशल न हो। कोई विचार? से app/controllers/links_controllerअजाक्स

.... 

    def up 
    @link = Link.find(params[:id]) 
    @link.update_attribute :points, @link.points + 1 
    redirect_to :back 
    end 

    def down 
    @link = Link.find(params[:id]) 
    @link.update_attribute :points, @link.points - 1 
    redirect_to :back 
    end 

    .... 

मेरे up और down कार्यों links_list की एक न्यूनतम संस्करण, app/views/links/_links_list से एक आंशिक, जो मैं भी दृश्य में प्रस्तुत करना विभिन्न छँटाई तरीकों

<% @links.each do |link| %> 
     <div class="row"> 
      <div class="span2"> 
       <%= link_to (image_tag ("up.png")), up_link_url(link), :method => :put %> 
       <%= link.points %> 
       <%= link_to (image_tag ("down.png")), down_link_url(link), :method => :put %> 
      </div> 
      <div class="span8"> 
       <%= link_to strip_tags(link.title), link %> 
      </div> 
     </div> 
    <% end %> 
  • मैं करूंगा का उपयोग कर बाहरी मणि के उपयोग के बिना इसे प्राप्त करने के लिए, ऐप पहले से ही उत्पादन में है
  • मैंने शायद अजाक्स और रेल से संबंधित अधिकांश रेल 3 ट्यूटोरियल देखे और कोशिश की हैं। यदि आप एक ट्यूटोरियल के लिए एक लिंक पोस्ट करते हैं, तो कृपया उन मॉडलों का सुझाव दें जिन्हें इसके लिए काम करने की आवश्यकता होगी।
  • मैं रेल चल रहा हूँ किसी भी प्रतिक्रिया या सुझाव के लिए अग्रिम में 3,1

धन्यवाद!

उत्तर

10

रेलक्स 3.1 में अजाक्स का उपयोग करना बहुत आसान है। यह पोस्ट मानता है कि आप jQuery को अपने जावास्क्रिप्ट ड्राइवर के रूप में उपयोग कर रहे हैं; यदि आप नहीं हैं, तो आपको jquery-rails मणि स्थापित करने की आवश्यकता होगी, लेकिन एक छोटे से मणि जोड़ने के उत्पादन में एक ऐप के लिए भी वास्तव में एक बड़ा सौदा नहीं होना चाहिए।

आपका नियंत्रक इस तरह देख खत्म हो जाएगा:

.... 

def up 
    @link = Link.find(params[:id]) 
    @link.update_attribute :points, @link.points + 1 
    respond_to do |format| 
    format.html {redirect_to :back} 
    format.js 
    end 
end 

def down 
    @link = Link.find(params[:id]) 
    @link.update_attribute :points, @link.points - 1 
    respond_to do |format| 
    format.html {redirect_to :back} 
    format.js 
    end 
end 

.... 

दृश्य परिवर्तन बहुत छोटा हो जाएगा:

<% @links.each do |link| %> 
    <div class="row"> 
    <div class="span2"> 
     <%= link_to (image_tag ("up.png")), up_link_url(link), :method => :put, :remote => true %> 
     <%= link.points %> 
     <%= link_to (image_tag ("down.png")), down_link_url(link), :method => :put, :remote => true %> 
    </div> 
    <div class="span8"> 
     <%= link_to strip_tags(link.title), link %> 
    </div> 
    </div> 

और आप नई फ़ाइलें, up.js.erb की आवश्यकता होगी और down.js.erb, आपके ऐप/व्यू/लिंक/फ़ोल्डर में, जिसमें आपके पेज को अपडेट करने के लिए जावास्क्रिप्ट कमांड शामिल है:

$(".span2").html("This post has <%= @link.points %> points.") 

यदि आप प्रोटोटाइप या कुछ के साथ जाने का निर्णय लेते हैं तो कोड उतना ही कम दिखाई देगा; एकमात्र परिवर्तन जावास्क्रिप्ट होगा जो आप up.js.erb और down.js.erb में रखते हैं, जो jQuery-y के बजाय प्रोटोटाइप-वाई होना चाहिए।

+0

बहुत बढ़िया मैं इसकी तलाश कर रहा हूं लेकिन समाधान हमेशा मूल सीआरयूडी ..... thanx ......... के बारे में था – Magnum