2016-11-11 2 views
0

Я хочу выполнить запрос where() по методу модели. Как это сделать?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 вместо массива?

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

Попробуйте использовать область видимости в модели см: http://api.rubyonrails.org/classes/ActiveRecord/Scoping/Named/ClassMethods.html и http://guides.rubyonrails.org/active_record_querying.html#scopes –

+0

Я не вижу, как это может мне помочь. –

+0

'Session.where (" end_date>? And end_date

ответ

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 это