2014-08-29 2 views
0

레일스 개발을 처음 접했고 조인과 병합에 관한 문제가 발생했습니다.레일 : where 절로 결합하기

강사 및 세션의 두 가지 모델이 있습니다. 앞으로 세션이있는 모든 강사를 표시하고 싶습니다 (즉, 강사가 아닌 강사는 표시하지 않음). 여기에 내가 가진 무엇, 그러나 (이 이상 1 개 앞으로 여러 번에 세션과 강사를 보여줍니다) 매우 옳지 않아 : 다음

class Session < ActiveRecord::Base 
    belongs_to :instructor 

    def self.is_current 
     where(start_time: Time.now.beginning_of_day..(Time.now.beginning_of_day + 1.year)) 
    end 
end 

class Instructor < ActiveRecord::Base 
    has_many :sessions 

    def self.with_current_sessions 
     joins(:sessions).merge(Session.is_current) 
    end 
end 

class InstructorsController < ApplicationController 
    def index 
     @instructors = Instructor.with_current_sessions 
    end 
end 

그리고 강사 인덱스보기 :

<% @instructors.each do |inst| %> 
    <h3><%= inst.full_name %></h3> 
    <% if inst.sessions.size > 0 %><p>Teaching <%= pluralize(inst.sessions.size, 'workshop') %>:</p> 
     <ul class="standard"> 
      <% inst.sessions.each do |sess| %> 
       <li><%= link_to sess.name, sess %></li> 
      <% end %> 
     </ul> 
    <% end %> 
<% end %> 
+0

그래서 정확히 작동하지 않는 것은 무엇입니까? 또한 Session은 많은 레일 및 기타 키워드와 연관 될 수 있으므로 모델에 대한 좋은 이름이 아니라고 생각합니다. – PericlesTheo

+0

두 개 이상의 세션이있는 강사가 두 번 이상 나타납니다. 모든 세션은 향후 세션뿐만 아니라 목록에 표시됩니다. – ergdegdeg

답변

0

나는이 해결을 (나는 또한 워크샵에 이름) 내 세션 모델에 defalut 범위를 추가하여 :

는 (과거 포함한) 모든 세션을 표시하려면

를 0
@workshops = Workshop.unscoped 

더 이상 병합 할 필요가 없습니다.

관련 문제