Cómo agregar cláusulas condicionales donde en rieles

Soy un novato de rails y estoy tratando de realizar una búsqueda en una mesa con rails, y solo estoy usando mi conocimiento de SQL para hacer esto. Pero esto simplemente no parece ni rieles ni rubí ...

¿Hay alguna manera mejor de hacer lo que estoy haciendo a continuación? (Básicamente, solo pasa los argumentos de fecha a SQL si están llenos)

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

usuario.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

Básicamente, quiero obtener un recuento del número de contenedores dentro de las etiquetas de un usuario determinado o con una relación directa, por ubicación, y quiero poder filtrarlo por las fechas de inicio y finalización.

Cualquiera de estas fechas puede ser nula, por lo que necesitaría abordar esto en mi "consulta".

Mi pregunta es: ¿Cómo puedo hacer esto a la manera de los carriles? Eché un vistazo ahttp://guides.rubyonrails.org/active_record_querying.html y tal vez podría usar el comando de excepción aquí en algún lugar ... pero este modelo de relación parece un poco complejo para hacer esto con ActiveRecord ... ¿cómo puedo ?, realmente creo que debería usar ActiveRecord, pero ¿cómo?

Gracias

Respuestas a la pregunta(2)

Su respuesta a la pregunta