Область Rails4, которая выбирает данные из двух таблиц и суммирует результат

#ruby-on-rails #ruby-on-rails-4

#ruby-on-rails #ruby-on-rails-4

Вопрос:

У меня есть две модели:

model/user.rb

 class User < ActiveRecord::Base
  has_many :points, dependent: :destroy
end
  

model/point.rb

 class Point < ActiveRecord::Base
  belongs_to :user
end
  

Я хочу создать scope то, что суммирует количество баллов, которое имеет конкретный пользователь.

Sql выглядит следующим образом:

ВЫБЕРИТЕ SUM(p.amount) У пользователей, ПОСКОЛЬКУ u ОСТАВИЛ точки СОЕДИНЕНИЯ КАК p НА p.user_id = u.id где u.id = 121;

Область может быть вызвана из пользовательского контроллера следующим образом:

 @total_points = @users.total_points(params[:user_id]) if params[:user_id].present?
  

Есть идеи?

Ответ №1:

В этом случае лучше использовать метод экземпляра, а не метод области или класса.

Добавьте этот метод в user.rb

 def total_points
  points.sum(:amount)
end
  

И вы можете назвать это как

 @user = User.find(params[:user_id])
@total_points = @user.total_points