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
This commit is contained in:
parent
7deb21b626
commit
078ba8c090
4 changed files with 24 additions and 5 deletions
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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)}}
|
||||
|
|
|
@ -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…
Reference in a new issue