我的控制器中有这个:
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
在我看来:
<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
是属于用户的每个板。
但是我得到了Boards.all
这样的每一块板子。
我想只获得属于用户的每一块电路板。
我尝试过使用@user.boards
,但我有一个像sth一样的数组:
@boards = Kaminari.paginate_array(@user.boards).page(params[:page]).per(1)
如何解决太阳黑子的这个问题?
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
答案 0 :(得分:3)
修复:要建模可搜索的块,您已添加此主板的父级:user_id ,如果您有mongodb数据库则为字符串,如果您有sql数据库则为整数:
#search
searchable do
text :name
string :user_id
end
在本案例的控制器中,我添加了s.with(:user_id, @user.id)
并将@user.boards
替换为模型名称,如:
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
现在工作正常:D。谢谢
答案 1 :(得分:1)
问题似乎是SOLR返回的次数超出了你的预期 - 其余的代码就我所知。
首先验证params[:search]
是否具有您期望的值(检查development.log
),如果是,则应运行rails console
并尝试手动搜索。