Como adicionar condicionais onde cláusulas em trilhos

Eu sou um novato rails e estou tentando realizar uma pesquisa em uma tabela com trilhos, e eu estou usando apenas meu conhecimento de sql para fazer isso. Mas isso não parece trilhos ou rubi mesmo ...

Existe alguma maneira melhor de fazer o que estou fazendo abaixo? (basicamente, apenas passe argumentos de data para o sql se eles estiverem preenchidos)

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

EDITAR

user.rb

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

place.rb

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

Basicamente, quero obter uma contagem do número de contêineres nos rótulos de um determinado usuário ou com um relacionamento direto, por local, e querer filtrá-lo pelas datas de início e término.

Qualquer uma dessas datas pode ser nula e, portanto, eu precisaria resolver isso na minha "consulta".

Minha pergunta é: como posso fazer isso da maneira de trilhos? Eu dei uma olhadahttp://guides.rubyonrails.org/active_record_querying.html e talvez eu poderia usar o comando exceto aqui em algum lugar ... mas este modelo de relacionamento parece um pouco complexo para fazer isso com ActiveRecord ... como eu posso ?, eu realmente acho que eu deveria usar o ActiveRecord, mas como?

Obrigado

questionAnswers(2)

yourAnswerToTheQuestion