2013-09-26 4 views
0

User has_many micropostsMicropost belongs to usersПерепишите метод рельсы модели для запроса ActiveRecord

Направить пользователей, которые имеют более чем 10 microposts

Контроллер:

def active_users 
    @users = User.active_users 
end 

Модель

def self.active_users 
    self.select { |u| u.microposts.size > 10} 
end 

как переписать метод active_users на запрос ActiveRecord й (возможно, с использованием :count:group методов)

       **UPDATE** 

the solution

self.joins(:microposts).group("users.id").having("count(*) > 10").all

+0

так любой прогресс? –

+1

yep ответ ниже '** UPDATE **' –

ответ

0

Counter_Cache ваш ответ.

Перейти на это может быть: http://railscasts.com/episodes/23-counter-cache-column http://guides.rubyonrails.org/association_basics.html#counter-cache

User has_many microposts

Micropost 
    belongs to users 
    counter_cache: true 

Затем сделать миграцию:

class AddMicropostCountToUsers < ActiveRecord::Migration 
    def change 
    add_column :users, :microposts_count, :integer 
    end 
end 

Тогда вы можете пойти на что-то подобное.

@users = User.where('microposts_count > ?', 10) 

Для дальнейшей настройки проверьте ссылки.

+0

counter chace также является хорошим вариантом для решения этой проблемы –

+0

см. Мой запрос на обновление сообщения, я решит свою проблему с помощью AR –

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