Как добавить условные предложения where в rails

Я новичок в рельсах и пытаюсь выполнить поиск по таблице с рельсами, и я просто использую для этого свои знания sql. Но это даже не похоже на рельсы или рубин...

Есть ли лучший способ сделать то, что я делаю ниже? (в основном, аргументы даты передаются в sql, только если они заполнены)

def search(begin_date=nil, end_date=nil)

    subject = " and created_at "

    if !(begin_date.nil? || end_date.nil?)
      where_part = subject + "BETWEEN :begin_date AND :end_date"
    else if (begin_date.nil? && end_date.nil?) 
      where_part = ""
    else if(begin_date.nil?)
      where_part = subject + " <= :end_date"
    else if (end_date.nil?)
      where_part = subject + " >= :begin_date"
    end
    end
    end
    end

    User.joins(places: {containers: {label: :user}}).where("users.id= :user_id "+where_part, user_id: self.id, begin_date:begin_date, end_date:end_date).group(...).select(...)
end

РЕДАКТИРОВАТЬ

user.rb

has_many :containers
has_many :user_places
has_many :places, through: :user_places
has_many :labels

место.рб

has_many :containers
has_many :user_places
has_many :users, through: :user_places

container.rb

belongs_to :label
belongs_to :place
belongs_to :user

label.rb

belongs_to :user
has_many :containers

По сути, я хочу получить подсчет количества контейнеров в пределах меток данного пользователя или с прямым отношением к каждому местоположению и хочу иметь возможность фильтровать его по датам начала и окончания.

Любая из этих дат может быть нулевой, поэтому мне нужно будет указать это в моем «запросе».

Мой вопрос: :Как я могу сделать это по рельсам? Я взглянул наhttp://guides.rubyonrails.org/active_record_querying.htmlи, возможно, я мог бы где-то здесь использовать команду exclude... но эта модель отношений кажется немного сложной для того, чтобы сделать это с ActiveRecord... как я могу? Я действительно думаю, что мне следует использовать ActiveRecord, но как?

Спасибо

9
задан mu is too short 7 September 2016 в 17:58
поделиться