diff --git a/app/models/key.rb b/app/models/key.rb
index 0c01edcbe716a685a1cd44d891cc08340b99bb1d..895e8d6cb9ccbab7693ceb422fa19529286760b0 100644
--- a/app/models/key.rb
+++ b/app/models/key.rb
@@ -24,8 +24,8 @@ class Key < ActiveRecord::Base
   before_save :set_identifier
 
   validates :title, presence: true, length: { within: 0..255 }
-  validates :key, presence: true, length: { within: 0..5000 }, format: { :with => /ssh-.{3} / }
-  validate :unique_key, :fingerprintable_key
+  validates :key, presence: true, length: { within: 0..5000 }, format: { :with => /ssh-.{3} / }, uniqueness: true
+  validate :fingerprintable_key
 
   delegate :name, :email, to: :user, prefix: true
 
@@ -33,14 +33,6 @@ class Key < ActiveRecord::Base
     self.key = self.key.strip unless self.key.blank?
   end
 
-  def unique_key
-    query = Key.where(key: key)
-    query = query.where('(project_id IS NULL OR project_id = ?)', project_id) if project_id
-    if (query.count > 0)
-      errors.add :key, 'already exist.'
-    end
-  end
-
   def fingerprintable_key
     return true unless key # Don't test if there is no key.
     # `ssh-keygen -lf /dev/stdin <<< "#{key}"` errors with: redirection unexpected
@@ -65,7 +57,7 @@ class Key < ActiveRecord::Base
   end
 
   def is_deploy_key
-    true if project_id
+    !!project_id
   end
 
   # projects that has this key
@@ -77,10 +69,6 @@ class Key < ActiveRecord::Base
     end
   end
 
-  def last_deploy?
-    Key.where(identifier: identifier).count == 0
-  end
-
   def shell_id
     "key-#{self.id}"
   end