Ruby on Rails: después de la búsqueda, la lista no muestra todos los datos

Tuve un problema en el que obtenía resultados duplicados en una búsqueda en mi aplicación Rails que permitía al usuario buscar proyectos en una base de datos.

Aquí está la función de búsqueda en el modelo de proyecto:

def self.search(search_industry, search_role, search_techs_ids) _projects = Project.scoped if search_industry.present? _projects = _projects.where ['industry LIKE ?', like(search_industry)] end if search_role.present? _projects = _projects.where ['role LIKE ?', like(search_role)] end if search_techs_ids.present? _projects = _projects.includes(:technols).where("technols.id" => search_techs_ids) end _projects end 

y aquí es parte de mi página de búsqueda

 
Technologies : true} ) %> true, :selected => tech_ids } ) %>

Aquí está mi acción de búsqueda:

 def search tech_ids = params[:technols][:id].reject(&:blank?) unless params[:technols].nil? @search = params[:industry], params[:role], tech_ids @project_search = Project.search(*@search).order(sort_column + ' ' + sort_direction).paginated_for_index(per_page, page) @search_performed = !@search.reject! { |c| c.blank? }.empty? @project = Project.new(params[:project]) @all_technols = Technol.all @project_technol = @project.projecttechnols.build respond_to do |format| format.html # search.html.erb format.json { render :json => @project } end end 

Ese problema ahora está resuelto, pero al solucionarlo, noté que cuando busco una tecnología única, los proyectos correctos aparecen en la tabla, pero en la columna de tecnología está destinado a mostrar todas las tecnologías que pertenecen a ese proyecto, pero solo muestra el que busqué:

   

¿Algunas ideas? En mi modelo solía tener este código que funcionaba para mostrar la tabla correctamente, pero mostraba resultados duplicados.

 if search_techs_ids.present? _projects = _projects.joins(:technols).where("technols.id" => search_techs_ids) end 

Cualquier ayuda será apreciada. Gracias por adelantado

SOLUCIÓN ver respuestas abajo

@shioyama y @tommasop ayudaron a solucionar el problema.

La solución fue cambiar mi vista de búsqueda donde la columna está hecha para

 

Encontré el mismo problema en una forma diferente: emparejando el atributo de asociación del modelo nested con incluye

Vea también esta discusión en la página de problemas de github de globalize3 , donde surgió el problema al intentar destruir un registro después de buscar por buscador dynamic (dejando asociaciones no coincidentes en la base de datos).

El problema es que está restringiendo la unión a proyectos con asociaciones de tecnología dadas (aquellas con id s en search_tech_ids ), por lo que esas son las únicas filas que devuelve Rails. Rails no tiene forma de saber que hay otros allí.

Básicamente, por lo que puedo decir, la solución más sencilla es volver a cargar los proyectos después de completar la búsqueda. Agregue una línea justo arriba de la última línea de su método de search , así:

 _projects.each { |p| p.technols.reload } _projects 

Esto le indicará a los Rails que recarguen las tecnologías asociadas con cada proyecto, incluidas las tecnologías con las que no coincidió en la búsqueda. Creo que eso debería funcionar en tu caso.

ACTUALIZACIÓN :

Después de muchos bashs (ver comentarios) y una sugerencia de @tommasop, la solución fue forzar la recarga de las tecnologías en la vista con:

 t.technols(force_reload=true).each 

Todavía no está claro por qué el enfoque de recarga arriba no estaba funcionando. Si alguien tiene alguna idea, por favor hágamelo saber, me gustaría saber.

Prueba con esta syntax:

 _projects.each { |p| p.technols(force_reload=true) } _projects 

referencia aquí