我是初学者,在我的rails应用程序中尝试与注册相关的一些方面。用户有很多注册;报名参加课程;注册有很多word_expositions和scrambled_words。
我在课程控制器中编写了一个帮助方法来生成一个已注册用户列表,以显示在每个课程显示页面中:
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
我现在正在尝试实现一个completed_expos帮助器,以便我可以在每个用户旁边指示他们是否已完成我的应用程序的展示组件。我所拥有的是:
<% enrolled_users.each do |user| %>
<ul>
<li><%= user.username %></li>
<% if completed_expos.include?(user) %>
completed
<% end %>
</ul>
<% end %>
我想在每个列出的用户旁边添加一个关于他们是否完成了博览会的通知。所以我尝试的是:
{{1}}
但效果是,虽然列出了注册用户,但没有迹象表明在应该列出的地方完成世博会。我该如何选择这个用户子组?
答案 0 :(得分:1)
从我的代码中可以得到的是,“completed_expos”方法将始终返回一个布尔值数组(true,false)而不是用户列表,因此它永远不会包含您指定的用户。
我想您可能想要做的是使用select而不是map。
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
答案 1 :(得分: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