2012-11-18 23 views
20

n00b soru. Veritabanımdaki her Kullanıcı kaydına girmeye çalışıyorum.Bir veritabanındaki her kayıtta yineleme - Ruby on Rails/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 

birisi bu iş için en iyi yaklaşımı biraz anlat Can: sözde kodu şöyle bir şeyler görünebilir? sözdizimi ile küçük bir yardım da :)

+1

size ulaşmak için çalışıyoruz ne biraz daha fazla arka plan alabilirsiniz. Bu şekilde size kullanıcı veritabanı üzerinden gitmek biraz daha fazla gider – toxicate20

+0

Ruby'de temel bir bilgiye sahipseniz daha iyidir. Kesinlikle pişman olmayacaksın. Her neyse, eğer döngüde amacın ne olduğunu söyle? –

+0

DB'deki her kullanıcıya bir SMS gönderme. 'number' = Bir Kullanıcının telefon numarası. – dougiebuckets

cevap

54

Burada çok iyi olurdu tüm Kullanıcıyı üzerinde yineleme için doğru sözdizimi şöyledir: yerine User.all performansını artırmak ve yükü azaltmak, User.find_each (see doc) kullanmak için

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

. Not find_each kullanarak sıralama yeteneği kaybeder. Ayrıca

+15

+1 son derece yararlıdır. Teşekkürler! – HungryCoder

+0

için – dougiebuckets

1

aynı amaç için olası tek satırlık:

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