Commit 65ecea4c
Changed files (3)
app
models
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