Display a diary entry count on the user page
authorPaweł Paprota <ppawel@fastmail.fm>
Fri, 5 Oct 2012 17:54:58 +0000 (19:54 +0200)
committerTom Hughes <tom@compton.nu>
Sun, 7 Oct 2012 15:17:01 +0000 (16:17 +0100)
app/models/diary_entry.rb
app/views/user/view.html.erb
db/migrate/20121005195010_add_diary_entry_counter_caches.rb [new file with mode: 0644]
db/structure.sql

index 64a412d28c771a55da936381c04f37737371962a..99a56b2ce1b8c4486110c4a9ba5662be171c3667 100644 (file)
@@ -1,7 +1,7 @@
 class DiaryEntry < ActiveRecord::Base
-  belongs_to :user
+  belongs_to :user, :counter_cache => true
   belongs_to :language, :foreign_key => 'language_code'
-  
+
   has_many :comments, :class_name => "DiaryComment",
                       :include => :user,
                       :order => "diary_comments.id"
index e209f853a90310532c7f2e747881ac04be8dedee..114f9b90af67ba6673f9cc36b7e7c953d84b0865 100644 (file)
@@ -12,6 +12,7 @@
     <span class='count-number'><%= number_with_delimiter(@user.traces.size) %></span>
     |
     <%= link_to t('user.view.my diary'), :controller => 'diary_entry', :action => 'list', :display_name => @user.display_name %>
+    <span class='count-number'><%= number_with_delimiter(@user.diary_entries.size) %></span>
     |
     <%= link_to t('user.view.my comments' ), :controller => 'diary_entry', :action => 'comments', :display_name => @user.display_name %>
     |
@@ -37,6 +38,7 @@
     <%= link_to t('user.view.send message'), :controller => 'message', :action => 'new', :display_name => @this_user.display_name %>
     |
     <%= link_to t('user.view.diary'), :controller => 'diary_entry', :action => 'list', :display_name => @this_user.display_name %>
+    <span class='count-number'><%= number_with_delimiter(@this_user.diary_entries.size) %></span>
     |
     <%= link_to t('user.view.comments'), :controller => 'diary_entry', :action => 'comments', :display_name => @this_user.display_name %>
     |
@@ -95,7 +97,7 @@
 </p>
 
 <% if @user and @user.administrator? -%>
-  <p><b><%= t 'user.view.email address' %></b> <%= @this_user.email %></p>  
+  <p><b><%= t 'user.view.email address' %></b> <%= @this_user.email %></p>
   <% unless @this_user.creation_ip.nil? -%>
   <p><b><%= t 'user.view.created from' %></b> <%= @this_user.creation_ip %></p>
   <% end -%>
diff --git a/db/migrate/20121005195010_add_diary_entry_counter_caches.rb b/db/migrate/20121005195010_add_diary_entry_counter_caches.rb
new file mode 100644 (file)
index 0000000..9c2c727
--- /dev/null
@@ -0,0 +1,13 @@
+class AddDiaryEntryCounterCaches < ActiveRecord::Migration
+  def self.up
+    add_column :users, :diary_entries_count, :integer, :null => false, :default => 0
+
+    DiaryEntry.group(:user_id).pluck(:user_id).each do |user_id|
+      User.reset_counters(user_id, :diary_entries)
+    end
+  end
+
+  def self.down
+    remove_column :users, :diary_entries_count
+  end
+end
index 5f71a9fb4962a416bedb4d9125409a328f783efe..c029e94e0683104ff77fa9ea3d09e03de61383e7 100644 (file)
@@ -1006,7 +1006,8 @@ CREATE TABLE users (
     description_format format_enum DEFAULT 'html'::format_enum NOT NULL,
     image_fingerprint character varying(255),
     changesets_count integer DEFAULT 0 NOT NULL,
-    traces_count integer DEFAULT 0 NOT NULL
+    traces_count integer DEFAULT 0 NOT NULL,
+    diary_entries_count integer DEFAULT 0 NOT NULL
 );
 
 
@@ -2267,6 +2268,8 @@ INSERT INTO schema_migrations (version) VALUES ('20120404205604');
 
 INSERT INTO schema_migrations (version) VALUES ('20120808231205');
 
+INSERT INTO schema_migrations (version) VALUES ('20121005195010');
+
 INSERT INTO schema_migrations (version) VALUES ('21');
 
 INSERT INTO schema_migrations (version) VALUES ('22');