2016-09-20 1 views
0

上のクエリは、私はこのクエリを持っている内部の場合:私はfecha_finとfecha_inicioでフィルタリングする必要がある場合どこレール

def self.search(nombre,zona,tipoActividad,fechaInicio,fechaFin,nombreProfesor) 

    where("nombre) iLIKE ? or contenido iLIKE ? or descripcion iLIKE ? ", "%#{nombre}%", "%#{nombre}%","%#{nombre}%") 
     .where("lugar iLIKE ?", "%#{zona}%") 
     .where("tipo_actividad iLIKE ?", "%#{tipoActividad}%") 
     .where(['fecha_inicio >= ?', fechaInicio]) ***if !fechaInicio.blank?*** 
     .where(['fecha_fin <= ?', fechaFin]) ***if !fechaFin.blank?*** 
     .joins(:user).where("users.lastname iLIKE ?", "%#{nombreProfesor}%") 
    end 

は私が問題を抱えています。パラメータが存在する場合にのみフィルタリングする必要があります。どうすればよいのですか?

ありがとうございました。

答えて

2

self.searchメソッドは、関連操作の連鎖を構築して返します。

したがって、ロジックを変数に格納し、必要に応じてチェーンに追加してリレーションを返す必要があります。

def self.search(nombre, zona, tipo_actividad, fecha_inicio, fecha_fin, nombre_profesor) 
    relation = where("nombre) iLIKE ? or contenido iLIKE ? or descripcion iLIKE ? ", "%#{nombre}%", "%#{nombre}%","%#{nombre}%") 
      .where("lugar iLIKE ?", "%#{zona}%") 
      .where("tipo_actividad iLIKE ?", "%#{tipo_actividad}%") 

    relation = relation.where('fecha_inicio >= ?', fecha_inicio) if fecha_inicio.present? 
    relation = relation.where('fecha_fin <= ?', fecha_fin) if fecha_fin.present? 

    relation = relation.joins(:user).where("users.lastname iLIKE ?", "%#{nombreProfesor}%") 

    return relation 
end 
関連する問題