【问题标题】:sunspot return all results for a model太阳黑子返回模型的所有结果
【发布时间】:2012-03-13 18:01:54
【问题描述】:

我的控制器中有这个:

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,但我有这样的数组分页:

@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 

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-3 solr sunspot


    【解决方案1】:

    问题已解决

    修复:为模型搜索块添加此板的父级: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。谢谢

    【讨论】:

      【解决方案2】:

      问题似乎在于 SOLR 返回的结果超出您的预期——就我所见,其余代码都很好。

      首先验证params[:search] 是否具有您期望的值(检查development.log),如果是,您应该运行rails console 并尝试手动搜索。

      【讨论】:

      • 谢谢!我已经在控制台中检查并返回相同的结果:(。我已经编辑了帖子以在控制台中添加测试:)
      • 我在回复中添加了解决方案:D。如果你想接受,你可以做到。谢谢!
      猜你喜欢
      • 2023-04-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多