Rails:加入where子句

时间:2014-08-29 15:29:29

标签: ruby-on-rails ruby-on-rails-4

我是Rails开发的新手,遇到了加入和合并的问题。

我有两个模型:讲师和会话。我想展示所有未来参加会议的教师(即不要展示未安排任何教学的教师)以及这些会议的列表。这就是我所拥有的,但它不太正确(这显示了未来多次会话超过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 %>

1 个答案:

答案 0 :(得分:0)

我通过在我的Session模型中添加一个defalut范围(我也将其重命名为Workshop)来解决这个问题:

default_scope { where(start_time: Time.now.beginning_of_day..(Time.now.beginning_of_day + 1.year)) }

显示所有会话(包括过去的会话):

@workshops = Workshop.unscoped

不再需要合并。