web-dev-qa-db-ja.com

データベース内のすべてのレコードを反復処理する-Ruby on Rails / ActiveRecord

n00bの質問。データベース内のすべてのユーザーレコードをループ処理しようとしています。疑似コードは次のようになります。

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

誰かがこれを行うための最善のアプローチについて私に記入できますか?構文の少しの助けも素晴らしいでしょう:)

29
dougiebuckets

以下は、すべてのUserを反復処理するための正しい構文です。

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

パフォーマンスを改善して負荷を減らすには、User.find_eachの代わりにUser.alldocを参照 )を使用します。 find_eachを使用すると、並べ替えの機能が失われることに注意してください。

65
Adrien Coquio

同じ目的のための可能なワンライナー:

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