2016-08-01 4 views
0

Я начинаю изучать некоторые аспекты, связанные с зачислением в приложение для рельсов. У пользователей много зачислений; зачисления относятся к уроку; в записях есть много word_expositions и scrambled_words.Вспомогательный метод для создания списка выбранных пользователей

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

helper_method :enrolled_users 
    def enrolled_users 
    lesson = Lesson.find(params[:id]) 
    enrollments = lesson.enrollments 
    enrolled_users = enrollments.map { |enrollment| enrollment.user } 
    end 

Я сейчас пытаюсь реализовать помощник completed_expos, так что я могу указать рядом с каждым пользователем, завершили ли они экспоненциальный компонент моего приложения. Что я имею:

helper_method :completed_expos 
    def completed_expos 
    lesson = Lesson.find(params[:id]) 
    completed_expos = enrolled_users.map do |user| 
     current_enrollment = lesson.enrollment_for(user) 
     all_expos = current_enrollment.word_expositions 
     all_expos.all? { |expos| expos.completed == true } 
    end 
    end 

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

<% enrolled_users.each do |user| %> 
    <ul> 
    <li><%= user.username %></li> 

    <% if completed_expos.include?(user) %> 
     completed 
    <% end %> 
    </ul> 
<% end %> 

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

ответ

1

Из того, что я могу получить от вашего кода является то, что ваш «completed_expos» метод всегда будет возвращать массив логических значений (true, false), а не список пользователей, поэтому он никогда не может включать указанного пользователя.

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

enrolled_users.select do |user| 
    current_enrollment = lesson.enrollment_for(user) 
    all_expos = current_enrollment.word_expositions 
    all_expos.all? { |expos| expos.completed == true } 
end 

Кроме того, позвольте мне сказать, что вам не нужно присваивать значения в каждом из ваших методов переменной с тем же именем, что и метод. Например.

def enrolled_users 
    lesson = Lesson.find(params[:id]) 
    enrollments = lesson.enrollments 
    enrolled_users = enrollments.map { |enrollment| enrollment.user } 
end 

Может быть

def enrolled_users 
    lesson = Lesson.find(params[:id]) 
    enrollments = lesson.enrollments 
    enrollments.map { |enrollment| enrollment.user } 
end 
0

Проблема помощник был не возвращает пользователя, чтобы отобразить его в массив:

helper_method :completed_expos 
def completed_expos 
    lesson = Lesson.find(params[:id]) 
    completed_expos = enrolled_users.map do |user| 
    current_enrollment = lesson.enrollment_for(user) 
    all_expos = current_enrollment.word_expositions 
    user if all_expos.all? { |expos| expos.completed == true } 
    end 
end 
Смежные вопросы