2016-03-20 2 views
0

Я создаю систему курсов в рельсах, и я хочу награждать пользователей очками за выполнение определенной задачи, но я хочу, чтобы пользователи не могли обновить страницу и снова получить очки ,Rails: разрешить пользователям получать очки только один раз. (Запретить пользователям обновлять страницу и получать очки снова)

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

def beginnerscourse_08c 
    @user = current_user 
    @completion = "100%" 
    @user.increment(:tradepoints, 100) 
    @user.save 
end 

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

+1

Какие модели у вас есть в вашем приложении? – Vishal

+0

Из кода, который выглядит, у вас есть столбец 'tradepoints' в таблице Users – Cyzanfar

+0

Вы используете devem gem' current_user' –

ответ

3

Вам нужна таблица ассоциаций, которая имеет user_id и course_id столбцы как внешние ключи. Целью таблицы является отслеживание того, какие пользователи получили награды за курсы. Например:

user_id course_id 
    1   1 
    2   1 
    2   2 
    3   1 
    4   3 

Глядя на приведенной выше таблице вы можете ясно видеть, что пользователь 1 завершил курс 1, 2 Пользователь завершил курс 1 и 2, и так далее. Затем вы можете проверить эту таблицу, чтобы узнать, получил ли конкретный пользователь вознаграждение за данный курс, прежде чем увеличивать свои баллы, а также делать такие вещи, как показать пользователю список курсов, которые они завершили, или запустить отчеты о том, сколько пользователей было выполнено данный курс.

+0

О, это имеет большой смысл. Спасибо огромное! – M1xelated

+0

Так что это означало бы, что я создаю таблицу курсов. И как только пользователь начнет курс, я скажу, что курс принадлежит пользователю, и у пользователя есть много курсов. – M1xelated

+0

Я бы создал его как 'course_completions' и добавил запись, когда пользователь завершил курс, но только если идентичная запись еще не существует (т. Е. Они еще не завершили ее). Другие детали зависят от остальной части вашего приложения. –

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