ruby-on-rails ruby-on-rails-3 solr sunspot

ruby on rails - manchas solares devuelven todos los resultados para un modelo



ruby-on-rails ruby-on-rails-3 (2)

Tengo en mi controlador esto:

def boards @user = User.find_by_slug(params[:id]) @search = @user.boards.solr_search do |s| s.fulltext params[:search] s.keywords params[:search] s.order_by :created_at, :desc s.paginate :page => params[:page], :per_page => 1 end @boards = @search.results respond_to do |format| format.html { render :layout => nil}# panel.html.erb format.json { render json: @boards } format.js end end

En mi vista:

<table id="body_object"> <% for board in @boards %> <tr class="attributes"> <td> <%= board.id %> </td> <td> <%= board.name %> </td> <td> <%= board.description %> </td> </tr> <% end %> </table> <div id="content_pagination"> <%= paginate @boards, :remote => :true %> </div>

@user.boards en el controlador son todas las placas que pertenecen al usuario.

Pero obtengo todas las placas como Boards.all .

Quiero obtener solo todas las placas que pertenecen al usuario.

Lo he intentado con @user.boards pero tengo que paginar una matriz como sth:

@boards = Kaminari.paginate_array(@user.boards).page(params[:page]).per(1)

¿Cómo puedo solucionar este problema de manchas solares?

Editado: prueba de consola agregada

1.9.2-p290 :094 > Board.all.size #I get count boards for Board.all => 4 1.9.2-p290 :095 > user = User.first #I get the first 1.9.2-p290 :096 > user.boards.size #I get count for boards belongs to user => 2 1.9.2-p290 :098 > user.boards.solr_search.total # This is the problem :O The result must be 2 => 4


El problema parece ser que SOLR devuelve más de lo que esperaba: el resto del código está bien por lo que puedo ver.

Primero verifique que params[:search] tenga el valor esperado (consulte el archivo development.log ) y, de ser así, debe ejecutar la rails console e intentar la búsqueda manualmente.


Problema fue arreglado

La solución: para el bloque de búsqueda de modelos, debe agregar el padre para esta placa : ID_usuario , cadena si tiene una base de datos mongodb y un entero si tiene una base de datos SQL:

#search searchable do text :name string :user_id end

En el controlador para este caso, he agregado s.with(:user_id, @user.id) y reemplacé @user.boards con el nombre del modelo como:

def boards @user = User.find_by_slug(params[:id]) @search = Board.solr_search do |s| s.fulltext params[:search] s.keywords params[:search] s.order_by :created_at, :desc s.with(:user_id, @user.id) s.paginate :page => params[:page], :per_page => 1 end @boards = @search.results respond_to do |format| format.html { render :layout => nil}# panel.html.erb format.json { render json: @boards } format.js end end

Ahora funciona bien: D. Gracias