我想对模型的方法执行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
是一个字段。
答案 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