diff --git a/app/models/project.rb b/app/models/project.rb
index f3266a1b197be5cbffec277954f693c0a16daa5a..35ffb0a415d751df55a1ac9d6fdc195cf7df2064 100644
--- a/app/models/project.rb
+++ b/app/models/project.rb
@@ -430,6 +430,9 @@ class Project < ActiveRecord::Base
   end
 
   def builds_for(build_name, ref = 'HEAD')
+    ct = commit(ref)
+    return [] unless ct
+
     sha = commit(ref).sha
 
     builds.joins(:pipeline).
diff --git a/spec/models/project_spec.rb b/spec/models/project_spec.rb
index 5a27ccbab0a1780bcc1c6c63e27ed0751ad6bf1a..06d99240708810e79144b9ada565a466df446869 100644
--- a/spec/models/project_spec.rb
+++ b/spec/models/project_spec.rb
@@ -359,11 +359,25 @@ describe Project, models: true do
   describe :repository do
     let(:project) { create(:project) }
 
-    it 'should return valid repo' do
+    it 'returns valid repo' do
       expect(project.repository).to be_kind_of(Repository)
     end
   end
 
+  describe '#builds_for' do
+    let(:project) { create(:project) }
+    let(:pipeline) do
+      create(:ci_pipeline, project: project, sha: project.commit.sha)
+    end
+    let(:build) { create(:ci_build, pipeline: pipeline) }
+
+    it 'returns builds for a particular ref' do
+      build_ids = project.builds_for(build.name, build.sha).map(&:id)
+
+      expect(build_ids).to eq([build.id])
+    end
+  end
+
   describe :default_issues_tracker? do
     let(:project) { create(:project) }
     let(:ext_project) { create(:redmine_project) }