Ruby on rails where()带有方法

时间:2016-11-11 03:29:18

标签: ruby-on-rails

我想对模型的方法执行where()查询。我该怎么做?

如果我不能,我有什么方法可以做到这一点:

Session.find_each.select do |session|
  session.end_date > params[:date_from].to_date && session.end_date < params[:date_to].to_date
end

但是返回ActiveRecordRelation而不是Array?

session.rb

class Session < ActiveRecord::Base
  belongs_to :course
  delegate :units, to: :course

  def end_date
    start_date + units.count.weeks
  end
end

end_date是方法,但start_date是一个字段。

1 个答案:

答案 0 :(得分:1)

你可以,但你必须使用joins

units属于课程,因此在应用courses之前,您必须加入where表。否则,您将获取所有会话,并根据end_date逐个过滤,这将生成大量的SQL查询。

Session.joins(:course).where("calculate_end_date() > ? AND calculated_end_date() < ?", date, date)

你需要calculate end date使用sql函数,google it

相关问题