Rails通过控制器过滤依赖数据

时间:2016-04-20 22:12:45

标签: ruby-on-rails

问题:我想在学生/演出中只显示即将到来的参加者(不是过去的参加者)。

我有

- scaffold lesson name starts_at:datetime ends_at:datetime

- scaffold attendance student:references lesson:references

- scaffold student name

student has_many :attendanceslesson has many :attendancesstudent has_many :lessons, through: :attendances

我试过

students_controller.rb:

@future_attendances = @student.attendances.where('lesson.starts_at > ?', Time.now)

学生/ show.html.haml:

      %table
        %thead
          %tr
            %th Title
            %th Starts at
        %tbody
          - @future_attendances.each do |attendance|
            %tr
              %td= attendance.lesson.name
              %td= attendance.lesson.starts_at

但它不起作用。有什么想法吗?

1 个答案:

答案 0 :(得分:1)

在黑暗中拍摄,你不能只做:

@future_lessons = @student.lessons.where('starts_at > ?', Time.now)

然后:

%tbody
  - @future_lessons.each do |lesson|
    %tr
      %td= lesson.name
      %td= lesson.starts_at

您当前的代码无效,因为您在课程表中查找了一列。您需要使用joins方法将课程表添加到查询中以使其工作。但是,我认为上面这一行是你真正想要的。