2012-11-18 17 views
20

n00b सवाल। मैं अपने डेटाबेस में हर उपयोगकर्ता रिकॉर्ड के माध्यम से लूप करने की कोशिश कर रहा हूँ। छद्म कोड इस तरह कुछ दिख सकता है:एक डेटाबेस में हर रिकॉर्ड के माध्यम से बार-बार दोहराना - रूबी ऑन रेल्स/ActiveRecord

def send_notifications 

     render :nothing => true 

     # Randomly select Message record from DB 
     @message = Message.offset(rand(Message.count)).first 

     random_message = @message.content 

     @user = User.all.entries.each do 
      @user = User.find(:id) 

      number_to_text = "" 

      @user.number = number_to_text #number is a User's phone number 
      puts @user.number 

     end 

    end 

क्या कोई मुझे ऐसा करने के लिए सबसे अच्छे तरीके से भर सकता है? वाक्य रचना के साथ एक छोटी सी मदद भी :)

+1

हम आप क्या हासिल करने की कोशिश कर रहे हैं पर थोड़ा अधिक पृष्ठभूमि मिल सकता है। आपके द्वारा उपयोगकर्ता डेटाबेस के माध्यम से जाकर इस तरह थोड़ा ओवरहेड लगता है – toxicate20

+0

यदि आपको रूबी में बुनियादी ज्ञान मिलता है तो यह बेहतर होगा। निश्चित रूप से, आपको पछतावा नहीं होगा। वैसे भी, हमें बताएं कि लूप अगर उद्देश्य क्या है? –

+0

डीबी में प्रत्येक उपयोगकर्ता को एक एसएमएस भेजना। 'संख्या' = उपयोगकर्ता का फोन नंबर। – dougiebuckets

उत्तर

54

यहाँ बहुत अच्छा होगा सभी उपयोगकर्ता से अधिक पुनरावृति करने के लिए सही सिंटैक्स है: User.all के बजाय

User.all.each do |user| 
    #the code here is called once for each user 
    # user is accessible by 'user' variable 
end 

प्रदर्शन को बेहतर बनाने और लोड में कमी, User.find_each (see doc) का उपयोग करें। ध्यान दें कि find_each का उपयोग करने की क्षमता खो जाती है।

+15

+1 बहुत उपयोगी है। धन्यवाद! – HungryCoder

+0

के लिए – dougiebuckets

1

इसके अलावा एक ही उद्देश्य के लिए एक संभावित एक लाइनर:

User.all.map { |u| u.number = ""; puts u.number }