Commit 65ecea4c

mo k <mo@mokhan.ca>
2012-06-07 13:14:00
run acts_as_commentable migration and make creation commentable.
1 parent db9063b
app/models/comment.rb
@@ -0,0 +1,50 @@
+class Comment < ActiveRecord::Base
+  acts_as_nested_set :scope => [:commentable_id, :commentable_type]
+
+  validates_presence_of :body
+  validates_presence_of :user
+
+  # NOTE: install the acts_as_votable plugin if you
+  # want user to vote on the quality of comments.
+  #acts_as_voteable
+
+  belongs_to :commentable, :polymorphic => true
+
+  # NOTE: Comments belong to a user
+  belongs_to :user
+
+  # Helper class method that allows you to build a comment
+  # by passing a commentable object, a user_id, and comment text
+  # example in readme
+  def self.build_from(obj, user_id, comment)
+    c = self.new
+    c.commentable_id = obj.id
+    c.commentable_type = obj.class.base_class.name
+    c.body = comment
+    c.user_id = user_id
+    c
+  end
+
+  #helper method to check if a comment has children
+  def has_children?
+    self.children.size > 0
+  end
+
+  # Helper class method to lookup all comments assigned
+  # to all commentable types for a given user.
+  scope :find_comments_by_user, lambda { |user|
+    where(:user_id => user.id).order('created_at DESC')
+  }
+
+  # Helper class method to look up all comments for
+  # commentable class name and commentable id.
+  scope :find_comments_for_commentable, lambda { |commentable_str, commentable_id|
+    where(:commentable_type => commentable_str.to_s, :commentable_id => commentable_id).order('created_at DESC')
+  }
+
+  # Helper class method to look up a commentable object
+  # given the commentable class name and id
+  def self.find_commentable(commentable_str, commentable_id)
+    commentable_str.constantize.find(commentable_id)
+  end
+end
app/models/creation.rb
@@ -1,4 +1,5 @@
 class Creation < ActiveRecord::Base
+  acts_as_commentable
   validates :name,  :presence => true
   validates :image,  :presence => true
   attr_accessible :user_id, :story, :name, :image, :remote_image_url
db/migrate/20120607130928_acts_as_commentable_with_threading_migration.rb
@@ -0,0 +1,21 @@
+class ActsAsCommentableWithThreadingMigration < ActiveRecord::Migration
+  def self.up
+    create_table :comments, :force => true do |t|
+      t.integer :commentable_id, :default => 0
+      t.string :commentable_type, :default => ""
+      t.string :title, :default => ""
+      t.text :body, :default => ""
+      t.string :subject, :default => ""
+      t.integer :user_id, :default => 0, :null => false
+      t.integer :parent_id, :lft, :rgt
+      t.timestamps
+    end
+    
+    add_index :comments, :user_id
+    add_index :comments, :commentable_id
+  end
+  
+  def self.down
+    drop_table :comments
+  end
+end