2017-02-28 7 views
0

私はモデルレッスンを持っています。各レッスンは、ドロップダウンフィールドを使用してセクション(1から10の間の文字列:セクション)に割り当てることができます。セクションはレッスンテーブルの列です。レッスンはモデルコースに属しています(course_id経由)Double each.do同じモデルでループを繰り返す

サイドバーにこの構造を表示しようとしていますが、セクションの下の各セクションのレッスンとその特定のコースに属するレッスンのみで分割されていますvia:course_id)スクリーンショットを参照してください。次のコードで

Screenshot of Sidebar, currently looping over the same database entries

、私は(ここでは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> 

誰かが私に解決策を教えてもらえますか?私はこの問題を正しい方法で解決していますか?

答えて

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 %>  

---更新---

の場合セクションモデルがない場合は、以下を実行することを検討します。

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 %>  

(私はyすべてのレッスンで常に作業する予定ですが、そうでない場合はスコープ付きクエリとして効率的に書かれます)

+0

ここでセクションはモデルではありません。レッスンモデルの文字列です。可能であれば、このためにセクションモデルを作成しないようにしました...長期的には私はおそらくこの方法で実装しますが、レッスンモデルだけのソリューションがあるのだろうかと疑問に思っていました – Jan

+0

上記の変更を参照してください –

関連する問題