1

Rails が fixnum として解釈しているように見える単純なクエリがありますが、その理由はわかりません。私のコードは次のようになります。

@user_with_points = Point.select("sum(points) as points, user_id").order("points desc").group("user_id")
@user_with_points.each_with_index do |user_with_point, index|     

を追加するputs @user_with_pointsと、次のように表示されます。

#<Point:0x6360138>
#<Point:0x6322f38>

ただし、次のエラーが表示されます:

NoMethodError: undefined method 'each' for 75:Fixnum

コード全体を追加する

def self.update_overall_rank_and_points
  @user_with_points = Point.select("sum(points) as points, user_id").order("points desc").group("user_id")
  rank = 0
  points = 0

  @user_with_points.each_with_index do |user_with_point, index|           
    @user = User.find(user_with_point.user_id)
    if user_with_point.points != points
      points = user_with_point.points
      rank += 1
    end
    @user.rank = rank
    @user.points = user_with_point.points
    @user.save
  end
end
4

2 に答える 2

2

クエリは、ポイントの合計を整数とするスカラー値を返しています。クエリの合計はたまたま 75 であるため、エラーになります。eachしたがって、列挙型ではないため、反対することはできません。

于 2013-03-08T03:32:09.270 に答える
0

試す:

@user_with_points = Point.sum(:points, :group => :user_id, :order => 'sum(points)')
@user_with_points.each do |user_id, points|
  #...
  user = User.find(user_id)
  if user.points != points
    puts "not equal!"
  end
end
于 2013-03-08T03:40:49.987 に答える