diff options
author | Johan Sørensen <johan@johansorensen.com> | 2009-12-08 11:35:50 +0100 |
---|---|---|
committer | Johan Sørensen <johan@johansorensen.com> | 2009-12-08 11:36:42 +0100 |
commit | 18760e32f67576c9ca137771f174113dc2d8a24e (patch) | |
tree | 94234ee96e7472b8ae428e8d84d5fc7167b96daf | |
parent | 46a1e39ea4e0fe997395c0d5fc68e0d6986ad45c (diff) | |
download | gitorious-mainline-outdated-18760e32f67576c9ca137771f174113dc2d8a24e.zip gitorious-mainline-outdated-18760e32f67576c9ca137771f174113dc2d8a24e.tar.gz gitorious-mainline-outdated-18760e32f67576c9ca137771f174113dc2d8a24e.tar.bz2 |
Paginate newsfeed events better on the ~user page
-rw-r--r-- | app/controllers/users_controller.rb | 7 | ||||
-rw-r--r-- | app/models/favorite.rb | 3 | ||||
-rw-r--r-- | app/models/user.rb | 18 | ||||
-rw-r--r-- | db/schema.rb | 12 |
4 files changed, 15 insertions, 25 deletions
diff --git a/app/controllers/users_controller.rb b/app/controllers/users_controller.rb index 26caf6a..927fefe 100644 --- a/app/controllers/users_controller.rb +++ b/app/controllers/users_controller.rb @@ -42,10 +42,7 @@ class UsersController < ApplicationController @projects = @user.projects.find(:all, :include => [:tags, { :repositories => :project }]) @repositories = @user.commit_repositories if current_user == @user && params[:events] != "outgoing" - @events = @user.events_in_watchlist.paginate( - :page => params[:page], - :include => [:user, :project] - ) + @events = @user.paginated_events_in_watchlist(:page => params[:page]) else @events = @user.events.paginate( :page => params[:page], :order => "events.created_at desc", @@ -83,7 +80,7 @@ class UsersController < ApplicationController wants.atom {render :template => "users/feed"} end end - + def create @user = User.new(params[:user]) @user.login = params[:user][:login] diff --git a/app/models/favorite.rb b/app/models/favorite.rb index e1359af..04467ec 100644 --- a/app/models/favorite.rb +++ b/app/models/favorite.rb @@ -19,6 +19,7 @@ class Favorite < ActiveRecord::Base belongs_to :user belongs_to :watchable, :polymorphic => true + validates_presence_of :user_id, :watchable_id, :watchable_type validates_uniqueness_of :user_id, :scope => [:watchable_id, :watchable_type] after_create :create_event @@ -43,7 +44,7 @@ class Favorite < ActiveRecord::Base watchable end end - + def create_event user.events.create(event_options) unless event_exists? end diff --git a/app/models/user.rb b/app/models/user.rb index 51efdc2..69fa94a 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -36,9 +36,8 @@ class User < ActiveRecord::Base :conditions => ["repositories.kind NOT IN (?)", Repository::KINDS_INTERNAL_REPO] has_many :ssh_keys, :order => "id desc", :dependent => :destroy has_many :comments - has_many :events, :order => "events.created_at asc", :dependent => :destroy - has_many :events_as_target, :class_name => "Event", :as => :target has_many :email_aliases, :class_name => "Email", :dependent => :destroy + has_many :events, :order => "events.created_at asc", :dependent => :destroy has_many :favorites, :dependent => :destroy # Virtual attribute for the unencrypted password @@ -372,12 +371,15 @@ class User < ActiveRecord::Base favorites.collect(&:watchable) end - def events_in_watchlist - Event.find(:all, - :joins => "inner join favorites ON favorites.watchable_id = events.target_id " + - "AND favorites.watchable_type = events.target_type", - :conditions => ["favorites.user_id=?", id], - :order => "events.created_at desc") + def paginated_events_in_watchlist(options = {}) + Event.paginate(:all, { + :conditions => { + :target_id => favorites.map(&:watchable_id), + :target_type => favorites.map(&:watchable_type) + }, + :order => "events.created_at desc", + :include => [:user, :project] + }.merge(options)) end protected diff --git a/db/schema.rb b/db/schema.rb index 6af5072..08d5f64 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -88,6 +88,7 @@ ActiveRecord::Schema.define(:version => 20091207133046) do t.string "user_email" end + add_index "events", ["action", "created_at"], :name => "index_events_on_action_and_created_at" add_index "events", ["action"], :name => "index_events_on_action" add_index "events", ["created_at", "project_id"], :name => "index_events_on_created_at_and_project_id" add_index "events", ["created_at"], :name => "index_events_on_created_at" @@ -121,17 +122,6 @@ ActiveRecord::Schema.define(:version => 20091207133046) do add_index "groups", ["name"], :name => "index_groups_on_name_and_public" add_index "groups", ["user_id"], :name => "index_groups_on_user_id" - create_table "hooks", :force => true do |t| - t.integer "user_id" - t.integer "repository_id" - t.string "url" - t.string "last_response" - t.datetime "created_at" - t.datetime "updated_at" - end - - add_index "hooks", ["repository_id"], :name => "index_hooks_on_repository_id" - create_table "memberships", :force => true do |t| t.integer "group_id" t.integer "user_id" |