我有一个模型课程。可以通过下拉字段将每个课程分配给一个部分(1-10,:部分之间的字符串)。该部分是Lessons表的一列。课程属于模型课程(via:course_id)
我正在尝试在补充工具栏中显示此构造,分为部分,部分下方的每个部分的课程以及仅属于该特定课程的课程(via:course_id)参见屏幕截图。
使用以下代码,我获得了在课程条目中选择的章节数(此处为2,第1节和第2节),但代码循环遍历相同的课程。
<div id="sidebar-nav">
<ul id="dashboard-menu">
<strong>Curriculum</strong><br><br>
<% Lesson.where(course_id: @course).select(:section).each do |section| %>
<div class="panel curriculum-navigation__section" ng-class="">
<div class="panel-heading" role="tab" id="lecture-3"><%= @lesson.section %>. Section</div>
<ol>
<% Lesson.where(course_id: @course).each do |lesson| %>
<br>
<li><%= link_to lesson.name, lesson %></li>
<% end %>
</ol><br>
</div>
<% end %>
</div>
有人能指出我的解决方案吗?我甚至以正确的方式解决了这个问题吗?
答案 0 :(得分:1)
您的数据结构似乎是倒退的。如果你有:
- Course
- Section
- Lesson
作为一个层次结构,你应该以这种方式定义和使用它,这样你的代码看起来就是谎言:
class Course
has_many :sections
has_many :lessons, through: :sections
end
class Section
belongs_to: :course
has_many :lessons
end
class Lesson
belongs_to :section
end
<% @course.sections.each do |section| %>
...
<% sections.lessons.each do |lesson| %>
...
<% end %>
<% end %>
---更新---
如果您没有Section模型,那么我会考虑执行以下操作:
class Course
def sections
lessions.map(&:section).uniq
end
def lessons_for_section(section)
lessons.filter { |l| l.section == section }
end
end
<% @course.sections.each do |section| %>
...
<% @course.lessons_for_section(section).each do |lesson| %>
...
<% end %>
<% end %>
(我已经假设你总是会参与所有的课程,如果不是,上面会更有效地写成一个范围的查询)