दिलचस्प पोस्ट
JSF पृष्ठों को .jsp या .xhtml या .jsf एक्सटेंशन के साथ बनाने में क्या अंतर है I फोन को जल्दी से 180 डिग्री घूमते हुए कैमरा पूर्वावलोकन उल्टा हो जाता है नोड वस्तु और तत्व ऑब्जेक्ट के बीच का अंतर? JSON से सूचीबद्ध सूची को पॉप्युलेट करें एक पढ़ना असंभव स्तर का उपयोग क्यों करें? सप्ताह संख्या से तारीख की गणना करें वर्ग चर और वर्ग उदाहरण चर के बीच अंतर? कस्टम डेटा एनोटेशन वैलडेटर कैसे बनाएं पासवर्ड इनपुट के बाद चमकदार ऐप प्रारंभ करना आवेदन में अंतर / जेसन और आवेदन / एक्स-www-फॉर्म-यूआरएलएक्सोडेड PHP विशेषताएँ क्यों नहीं कार्य करता है? जावास्क्रिप्ट पर गंतव्य यूआरएल कैसे प्राप्त कर सकता है? मेरी बहुत सरल Greasemonkey स्क्रिप्ट नहीं चल रही है? एक पंक्ति MYSQL में एकाधिक बाल पंक्तियों को मिलाएं मुझे आखिरकार सुपर-डेलोक क्यों कॉल करना पड़ता है, पहले नहीं?

रेलवे पर रूबी एक सरणी के__अगला

मैं सोच रहा था कि कोई व्यक्ति चीजों की एक सरणी पर how_paginate का उपयोग कैसे कर सकता है?

उदाहरण के लिए, मेरी साइट पर मेरे पास एक राय अनुभाग है जहां उपयोगकर्ता राय को रेट कर सकते हैं। यहां एक ऐसी विधि है जिसे मैंने उपयोगकर्ताओं को इकट्ठा करने के लिए लिखा था जिन्होंने राय को रेट किया है:

def agree_list list = OpinionRating.find_all_by_opinion_id(params[:id]) @agree_list = [] list.each do |r| user = Profile.find(r.profile_id) @agree_list << user end end 

धन्यवाद

वेब के समाधान से एकत्रित समाधान "रेलवे पर रूबी एक सरणी के__अगला"

will_paginate 3.0 को रेलवे 3 में नए ActiveRecord::Relation का लाभ लेने के लिए डिज़ाइन किया गया है, इसलिए यह डिफ़ॉल्ट रूप से संबंधों पर केवल पेजगिन को परिभाषित करता है यह अभी भी एक सरणी के साथ काम कर सकता है, लेकिन आपको उस भाग की आवश्यकता के लिए रेल को बताना होगा।

आपकी config/initializers will_paginate_array_fix.rb ( will_paginate_array_fix.rb उपयोग किया will_paginate_array_fix.rb ) में एक फ़ाइल में, इसे जोड़ें

 require 'will_paginate/array' 

तब आप सरणियों पर उपयोग कर सकते हैं

 my_array.paginate(:page => x, :per_page => y) 

आप Array#from पृष्ठ पर अंक लगाना अनुकरण करने के लिए इस्तेमाल कर सकते हैं, लेकिन यहां असली समस्या यह है कि आपको Array का उपयोग बिल्कुल नहीं करना चाहिए।

इस के लिए क्या ActiveRecord एसोसिएशन बनाया जाता है आपको उस गाइड को सावधानी से पढ़ना चाहिए, बहुत उपयोगी चीजें हैं जिन्हें आपको पता चलाना होगा कि क्या आप रेल अनुप्रयोगों को विकसित कर रहे हैं

मैं आपको एक ही काम करने का एक बेहतर तरीका दिखाता हूँ:

 class Profile < ActiveRecord::Base has_many :opinion_ratings has_many :opinions, :through => :opinion_ratings end class Opinion < ActiveRecord::Base has_many :opinion_ratings end class OpinionRating < ActiveRecord::Base belongs_to :opinion belongs_to :profile end 

यह महत्वपूर्ण है कि आपका डेटाबेस स्कीमा उचित नामकरण सम्मेलनों का पालन कर रहा है या यह सब टूट जाएगा। सुनिश्चित करें कि आप अपने तालिकाओं को अपने हाथ से करने के बजाय डेटाबेस माइग्रेशन के साथ बना रहे हैं

ये एसोसिएशन आपके मॉडल पर मददगार बनाने के लिए बहुत आसान खोज करेंगे। राय रेटिंग की एक सूची को चलाने और मैन्युअल रूप से उपयोगकर्ताओं को इकट्ठा करने के बजाय, आप रेल 2.3 या 3.0 का उपयोग कर रहे हैं, इस पर निर्भर करते हुए आप इसे named_scope या scope के उपयोग के लिए कर सकते हैं। चूंकि आपने निर्दिष्ट नहीं किया है, इसलिए मैं दोनों उदाहरण देता हूं। इसे अपने OpinionRating वर्ग में जोड़ें:

2.3

 named_scope :for, lambda {|id| { :joins => :opinion, :conditions => { :opinion => { :id => id } } } } named_scope :agreed, :conditions => { :agree => true } named_scope :with_profiles, :includes => :profile 

3.0

 scope :agreed, where(:agree => true) def self.for(id) joins(:opinion).where(:opinion => { :id => id }) end 

या तो किसी भी मामले में आप OpinionRatings मॉडल पर for(id) कॉल कर सकते हैं और इसे एक आईडी पास कर सकते हैं:

2.3

 @ratings = OpinionRating.agreed.for(params[:id]).with_profiles @profiles = @ratings.collect(&:profile) 

3.0

 @ratings = OpinionRating.agreed.for(params[:id]).includes(:profile) @profiles = @ratings.collect(&:profile) 

यह सब का नतीजा यह है कि अब आप आसानी से पगनेट कर सकते हैं:

 @ratings = @ratings.paginate(:page => params[:page]) 

रेल 4.x के लिए अद्यतन: अधिक या कम एक ही:

 scope :agreed, ->{ where agreed: true } def self.for(id) joins(:opinion).where(opinion: { id: id }) end 

नए पटरियों के लिए हालांकि मेरी पसंद पृष्ठांकन के लिए कामिनेरी है:

 @ratings = @ratings.page(params[:page]) 

मणि will_paginate दोनों ActiveRecord क्वेरी और arrays will_paginate जाएगा।

 list = OpinionRating.where(:opinion_id => params[:id]).includes(:profile).paginate(:page => params[:page]) @agree_list = list.map(&:profile) 

अगर आप कॉन्फ़िग फाइल का उपयोग नहीं करना चाहते हैं या इसके साथ परेशानी है, तो आप यह भी सुनिश्चित कर सकते हैं कि आप किसी ऐरेआर के बजाय एक ActiveRecord :: Relation उदाहरण के लिए, इसके बजाय उपयोगकर्ता आईडी की सूची बनाने के लिए agree_list को बदलें, फिर किसी रिटर्न को वापस करने के लिए इन आईडी पर जाएं।

 def agree_list list = OpinionRating.find_all_by_opinion_id(params[:id]) @agree_id_list = [] list.each do |r| user = Profile.find(r.profile_id) @agree_id_list << user.id end @agree_list = User.where(:id => @agree_id_list) end 

यह डेटाबेस के परिप्रेक्ष्य से अक्षम है, लेकिन यह किसी के लिए एक विकल्प है जो कि will_paginate config फ़ाइल से संबंधित होगा।

मैंने रेल संघों का फायदा उठाया, और एक नई विधि के साथ आया:

 def agree_list o = Opinion.find(params[:id]) @agree_list = o.opinion_ratings(:conditions => {:agree => true}, :order => 'created_at DESC').paginate :page => params[:page] rescue ActiveRecord::RecordNotFound redirect_to(profile_opinion_path(session[:user])) end 

मेरे विचार में मैंने इस तरह प्रोफ़ाइल देखी:

 <% @agree_list.each do |rating| %> <% user = Profile.find(rating.profile_id) %> <% end %> 

अगर ऐसा करने का एक बेहतर तरीका है, तो कृपया पोस्ट करें मैंने किसी किस्मत के साथ राय रेटिंग मॉडल में नामित_स्स्कोप सहायक का उपयोग करने की कोशिश की यहां मैंने जो कोशिश की है उसका एक उदाहरण है, लेकिन काम नहीं करता है:

 named_scope :with_profile, lambda {|id| { :joins => [:profile], :conditions => ['profile_id = ?', id] } } 

ऐसा लगता है जैसे कि विधि का उपयोग करने के तरीकों के समान ही

पूरी सहायताके लिए शुक्रिया।

मैं रेल 3 रब्बी 1.9.2 का उपयोग कर रहा हूँ। इसके अलावा, मैं सिर्फ ऐप शुरू कर रहा हूं, इसलिए कोई सीएसएस या स्टाइल शामिल नहीं है।

Will_paginate स्थापित करें:

मणि स्थापित करेगा I_paginate

Gemfile और बंडल चलाने में जोड़ें

नियंत्रक

 class DashboardController < ApplicationController include StructHelper def show @myData =structHelperGet.paginate(:page => params[:page]) end end 

मॉड्यूल StructHelper कोई सेवा, एक डेटाबेस नहीं पूछता है structHelperGet () रिकॉर्ड की एक सरणी देता है

निश्चित नहीं है कि अगर एक अधिक परिष्कृत समाधान नकली मॉडल का होगा या डेटा को हर बार ले लें और एक समय में एक वर्गमीटर तालिका को फिर से बनाना और क्वेरी के लिए एक वास्तविक मॉडल होगा। बस अपना पहला रेल ऐप कभी भी बना रहा है

राय

 <div id="Data"> <%= will_paginate @myData%> <table> <thead> <tr> <th>col 1</th> <th>Col 2</th> <th>Col 3</th> <th>Col 4</th> </tr> </thead> </tbody> <% @myData.each do |app| %> <tr> <td><%=app[:col1]%> </td> <td><%=app[:col2]%> </td> <td><%=app[:col3]%> </td> <td><%=app[:col4]%> </td> </tr> <% end %> </tbody> </table> <%= will_paginate @myData%> </div> 

इससे आप प्रति पृष्ठ डिफ़ॉल्ट 30 पंक्तियों का प्रबंधन कर सकते हैं।

अगर आपने http://railstutorial.org नहीं पढ़ा है, तो अभी इसे पढ़ना शुरू करें।