2015-05-07 2 views
0

Мне удалось получить leaderboard gem, работая над моим Rails-приложением, но я не могу понять, как получить данные пользователя на нем. Я также не знаю, как получить его обновить как обновления оценки пользователей ...Получите таблицу лидеров, чтобы обновлять каждый раз, когда пользователь оценивает обновления.

Я следовал this tutorial, чтобы попытаться заставить его работать, но я сейчас изо всех сил получать последний бит интегрирован ...

на данный момент у меня есть Советы update_service.rb нравятся:

module Boards 
    class UpdateService < Boards::Base 
    def execute(user) 
     name = user.first_name 
     score = user.percentages 
     leaderboard.rank_member(name, score) 
     member = leaderboard.score_and_rank_for(name) 
     member[:page] = leaderboard.page_for(name, leaderboard.page_size) 
     member 
    end 
    end 
end 

Я хочу назвать эту услугу на всех пользователях в настоящее время (так, что все они в одном ряду с их текущими счетами), а затем настроить его так, что это вызывается каждый раз, когда счет пользователя обновляется.

Я не знаю, куда звонить его, чтобы получить исходные данные ...

Но играя в консоли рельсы я нашел вызова это работает:

update = Boards::UpdateService.new 
Student.all.each do |student| 
    update.execute(student) 
end 

За это обновление в качестве обновления счета пользователя я думал, что я должен сделать что-то вроде этого:

after_update :update_rank 

    def update_rank 
    Boards::UpdateService.new 
    end 

в классе пользователя, хотя, честно говоря, я получил это частично из учебника, и я не очень-то у nderstand почему это не так:

def update_rank 
    Boards::UpdateService(user) 
end 

Но это может быть просто потому, что я действительно не понимаю, что происходит очень хорошо ...

ответ

0

Поскольку UpdateService является классом, а не имя метода, вы должны создайте экземпляр этого класса, вызвав конструктор UpdateService.new. Видя, как есть execute метод там, рассмотреть возможность сделать что-то вдоль линий:

def update_rank 
    update = Boards::UpdateService.new 
    update.execute(self) 
end 

UPDATE:

Calling execute будет работать на инициализацию просто потому, что он обновляет пользователя leaderboard, если она существует, и создает его если это не так.

Чтобы правильно его инициализировать, вы должны подумать о том, чтобы вызвать методы создания лидерства для пользователя, когда он или она создается.

+0

Хм, хорошо, что имеет смысл ... Я попробую это, как только выясню, как сначала получить все остальные оценки пользователя ... – camillavk

 Смежные вопросы

  • Нет связанных вопросов^_^