Skip to content
Snippets Groups Projects
Commit 078ba8c0 authored by Paco Guzman's avatar Paco Guzman
Browse files

issuable#labels_array explicitly load the labels

This will be useful when you want to ask for the 
number of items and later iterate over them, without 
needing to ask if the association is load or not.

So you avoid extra database queries
parent 7deb21b6
No related branches found
No related tags found
No related merge requests found
Loading
Loading
@@ -30,6 +30,7 @@ v 8.9.0 (unreleased)
- Add Application Setting to configure Container Registry token expire delay (default 5min)
- Cache assigned issue and merge request counts in sidebar nav
- Cache project build count in sidebar nav
- Reduce number of queries needed to render issue labels in the sidebar
 
v 8.8.3
- Fix incorrect links on pipeline page when merge request created from fork
Loading
Loading
Loading
Loading
@@ -213,6 +213,10 @@ module Issuable
hook_data
end
 
def labels_array
labels.to_a
end
def label_names
labels.order('title ASC').pluck(:title)
end
Loading
Loading
Loading
Loading
@@ -114,20 +114,20 @@
.sidebar-collapsed-icon
= icon('tags')
%span
= issuable.labels.count
= issuable.labels_array.size
.title.hide-collapsed
Labels
= icon('spinner spin', class: 'block-loading')
- if can_edit_issuable
= link_to 'Edit', '#', class: 'edit-link pull-right'
.value.bold.issuable-show-labels.hide-collapsed{ class: ("has-labels" if issuable.labels.any?) }
- if issuable.labels.any?
- issuable.labels.each do |label|
.value.bold.issuable-show-labels.hide-collapsed{ class: ("has-labels" if issuable.labels_array.any?) }
- if issuable.labels_array.any?
- issuable.labels_array.each do |label|
= link_to_label(label, type: issuable.to_ability_name)
- else
.light None
.selectbox.hide-collapsed
- issuable.labels.each do |label|
- issuable.labels_array.each do |label|
= hidden_field_tag "#{issuable.to_ability_name}[label_names][]", label.id, id: nil
.dropdown
%button.dropdown-menu-toggle.js-label-select.js-multiselect{type: "button", data: {toggle: "dropdown", field_name: "#{issuable.to_ability_name}[label_names][]", ability_name: issuable.to_ability_name, show_no: "true", show_any: "true", project_id: (@project.id if @project), issue_update: issuable_json_path(issuable), labels: (namespace_project_labels_path(@project.namespace, @project, :json) if @project)}}
Loading
Loading
Loading
Loading
@@ -227,6 +227,20 @@ describe Issue, "Issuable" do
end
end
 
describe '#labels_array' do
let(:project) { create(:project) }
let(:bug) { create(:label, project: project, title: 'bug') }
let(:issue) { create(:issue, project: project) }
before(:each) do
issue.labels << bug
end
it 'loads the association and returns it as an array' do
expect(issue.reload.labels_array).to eq([bug])
end
end
describe "votes" do
let(:project) { issue.project }
 
Loading
Loading
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment