солнечное пятно возвращает все результаты для модели - PullRequest
2 голосов
/ 13 марта 2012

У меня в контроллере это:

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 

Ответы [ 2 ]

3 голосов
/ 15 марта 2012

Проблема была исправлена ​​

Исправление: для модели доступного для поиска блока добавьте родителя для этой доски : 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 голос
/ 13 марта 2012

Кажется, проблема в том, что SOLR возвращает больше, чем вы ожидаете - насколько я понимаю, остальная часть кода в порядке.

Сначала убедитесь, что params[:search] имеет ожидаемое вами значение (отметьте development.log), и если это так, вы должны запустить rails console и попробовать поискать вручную.

...