2012-11-18 3 views
20

n00b 질문. 내 데이터베이스의 모든 사용자 레코드를 반복하려고합니다. 의사 코드는 다음과 같이 약간 보일 수 있습니다.데이터베이스의 모든 레코드 반복 - 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 

누군가이 작업을 수행하는 가장 좋은 방법을 제안 할 수 있습니까? 구문과 약간의 도움이 너무 :

+1

우리는 당신이 달성하려고하는 것에 좀 더 배경을 얻을 수 있습니다. 이런 식으로 사용자 데이터베이스를 살펴 보는 것은 약간의 오버 헤드가 될 것 같습니다. – toxicate20

+0

Ruby에 대한 기본적인 지식을 얻는 것이 좋습니다. 후회하지 않을거야. 루프가 있다면 목적은 무엇입니까? –

+0

DB에있는 모든 사용자에게 SMS를 보냅니다. 'number'= 사용자의 전화 번호입니다. – dougiebuckets

답변

54

여기에 좋은 것 모든 사용자 반복 할 수있는 올바른 구문입니다 대신 User.all의 성능을 향상시키고 부하를 감소 User.find_each (see doc를) 사용하려면

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

은. find_each을 사용하면 정렬 할 수 없습니다. 또한

+15

+1에 대한 'find_each' – HungryCoder

+0

매우 도움이됩니다. 감사! – dougiebuckets

1

같은 목적을 위해 가능한 한 라이너 :

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