Commit 3f1c7b5b

mo khan <mo@mokhan.ca>
2014-01-18 05:44:29
record an new activity when someone adds your cake to their favorites.
1 parent af4fa0b
app/models/activity.rb
@@ -0,0 +1,4 @@
+class Activity < ActiveRecord::Base
+  belongs_to :subject, polymorphic: true
+  belongs_to :user
+end
app/models/creation.rb
@@ -5,6 +5,7 @@ class Creation < ActiveRecord::Base
   has_many :photos, -> { order :created_at }, :dependent => :destroy
   has_many :favorites, :dependent => :destroy
   acts_as_taggable
+  alias_method :author, :user
 
   default_scope -> { order(:created_at => :desc) }
 
app/models/favorite.rb
@@ -1,4 +1,9 @@
 class Favorite < ActiveRecord::Base
   belongs_to :user
   belongs_to :creation, :counter_cache => true, touch: true
+  after_create :create_activity
+
+  def create_activity
+    Activity.create(user: creation.author, subject: self)
+  end
 end
app/models/user.rb
@@ -17,6 +17,7 @@ class User < ActiveRecord::Base
   has_many :creations, :dependent => :destroy
   has_many :favorites, :dependent => :destroy
   has_many :tutorials, :dependent => :destroy
+  has_many :activities
   has_and_belongs_to_many :interests, :join_table => 'users_interests', :autosave => true
   has_one :avatar
   acts_as_tagger
db/schema.rb
@@ -16,21 +16,6 @@ ActiveRecord::Schema.define(version: 20140118052950) do
   # These are extensions that must be enabled in order to support this database
   enable_extension "plpgsql"
 
-  create_table "active_admin_comments", force: true do |t|
-    t.integer  "resource_id",   null: false
-    t.string   "resource_type", null: false
-    t.integer  "author_id"
-    t.string   "author_type"
-    t.text     "body"
-    t.datetime "created_at"
-    t.datetime "updated_at"
-    t.string   "namespace"
-  end
-
-  add_index "active_admin_comments", ["author_type", "author_id"], name: "index_active_admin_comments_on_author_type_and_author_id", using: :btree
-  add_index "active_admin_comments", ["namespace"], name: "index_active_admin_comments_on_namespace", using: :btree
-  add_index "active_admin_comments", ["resource_type", "resource_id"], name: "index_active_admin_comments_on_resource_type_and_resource_id", using: :btree
-
   create_table "activities", force: true do |t|
     t.integer  "subject_id",   null: false
     t.string   "subject_type", null: false
spec/models/favorite_spec.rb
@@ -0,0 +1,14 @@
+require "spec_helper"
+
+describe Favorite do
+  context "#create" do
+    let(:creation) { create(:creation, user: author) }
+    let(:author) { create(:user) }
+    let(:user) { create(:user) }
+
+    it "creates a new activity" do
+      creation.favorites.create(:user => user)
+      creation.author.activities.count.should == 1
+    end
+  end
+end