#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