diff --git a/app/models/commit.rb b/app/models/commit.rb
index 5c6b4d88d9673584d97c5eac2ae96af117048a1d..15afedcb101708b252afb3f3b83dab8cb7fd8438 100644
--- a/app/models/commit.rb
+++ b/app/models/commit.rb
@@ -1,6 +1,7 @@
 class Commit
   include ActiveModel::Conversion
   include Gitlab::Encode
+  include StaticModel
   extend ActiveModel::Naming
 
   attr_accessor :commit
@@ -22,8 +23,7 @@ class Commit
     :to_patch,
     to: :commit
 
-
-  class << self 
+  class << self
     def find_or_first(repo, commit_id = nil, root_ref)
       commit = if commit_id
                  repo.commit(commit_id)
@@ -85,7 +85,7 @@ class Commit
       first = project.commit(to.try(:strip))
       last = project.commit(from.try(:strip))
 
-      result = { 
+      result = {
         commits: [],
         diffs: [],
         commit: nil
@@ -105,10 +105,6 @@ class Commit
     end
   end
 
-  def persisted?
-    false
-  end
-
   def initialize(raw_commit, head = nil)
     @commit = raw_commit
     @head = head
@@ -155,7 +151,7 @@ class Commit
     prev_commit.try :id
   end
 
-  def parents_count 
+  def parents_count
     parents && parents.count || 0
   end
 end
diff --git a/app/roles/static_model.rb b/app/roles/static_model.rb
new file mode 100644
index 0000000000000000000000000000000000000000..d26c8f4750132afb8a07022f64c977b59e1b4f72
--- /dev/null
+++ b/app/roles/static_model.rb
@@ -0,0 +1,35 @@
+# Provides an ActiveRecord-like interface to a model whose data is not persisted to a database.
+module StaticModel
+  extend ActiveSupport::Concern
+
+  module ClassMethods
+    # Used by ActiveRecord's polymorphic association to set object_id
+    def primary_key
+      'id'
+    end
+
+    # Used by ActiveRecord's polymorphic association to set object_type
+    def base_class
+      self
+    end
+  end
+
+  # Used by AR for fetching attributes
+  #
+  # Pass it along if we respond to it.
+  def [](key)
+    send(key) if respond_to?(key)
+  end
+
+  def to_param
+    id
+  end
+
+  def persisted?
+    false
+  end
+
+  def destroyed?
+    false
+  end
+end