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