2013-07-16 2 views
0

у меня есть что-то подобное в моей модели:шины - сортировка по количеству связанного объекта

class User < ActiveRecord::Model 

    has_many :followers, :through => :as_followed_followings, :class_name => "User", :foreign_key => "follower_id", :uniq => true 

    ... 

    def self.search(params) 
    tire.search(load: true, page: params[:page], per_page: params[:per]) do 
    end 
    end 

end 

Я хотел бы вернуть массив пользователей заказанного подсчетом последователей, которые пользователь имеет.

Итак, каков правильный способ определения сопоставлений и индексов для поиска по вложенному объекту со свойством count?

Спасибо за чтение.

ответ

-1

Попытка с ...

AsFollowedFollowing.count(:group => :follower_id, :order => "count_all DESC") 

Это Заказанный Hash, который содержит user_id => count

Если вы хотите, чтобы петля это хэш, попробуйте следующее

# in controller 
@counts = AsFollowedFollowing.count(:group => :follower_id, :order => "count_all DESC") 
@users = User.where(:id => @counts.map{|k,_| k}) 

#in view 
<% @counts.each do |k, v| %> 
    <% user = @users.find{|u| u.id == k} %> 
    <div><%= user.name %> | <%= v %></div> 
<% end %> 
+0

является 'count' DSL от elasticsearch? – nXqd

+0

Извините, на самом деле я не знаю, что искали. count - метод ActiveRecord :: Model. –

+0

спасибо за ваш ответ, но это не в тему, так как мой вопрос касается elasticsearch и шины gem :) – nXqd

0

Я решил эту проблему, создавая другое поле в таблице users и индексируйте это значение вместо выполнения вложенного поиска во время выполнения.

Это может быть не лучшее решение, но у меня есть крайний срок. Любое лучшее решение приветствуется :)

Смежные вопросы