From 7580f3366a6e4a16b439de7fd64860fe26628ad7 Mon Sep 17 00:00:00 2001 From: "M.Shibuya" Date: Sat, 9 Oct 2021 12:52:36 +0900 Subject: [PATCH] Show a dash '-' with an empty association Closes #2681 --- lib/rails_admin/config/fields/association.rb | 2 +- spec/rails_admin/config/fields/association_spec.rb | 13 ++++++++++++- 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/lib/rails_admin/config/fields/association.rb b/lib/rails_admin/config/fields/association.rb index 68ccd19c35..b296386da2 100644 --- a/lib/rails_admin/config/fields/association.rb +++ b/lib/rails_admin/config/fields/association.rb @@ -18,7 +18,7 @@ def association wording = associated.send(amc.object_label_method) can_see = !am.embedded? && (show_action = v.action(:show, am, associated)) can_see ? v.link_to(wording, v.url_for(action: show_action.action_name, model_name: am.to_param, id: associated.id), class: 'pjax') : ERB::Util.html_escape(wording) - end.to_sentence.html_safe + end.to_sentence.html_safe.presence || '-' end # Accessor whether association is visible or not. By default diff --git a/spec/rails_admin/config/fields/association_spec.rb b/spec/rails_admin/config/fields/association_spec.rb index aa220e21e8..9cf6dc5817 100644 --- a/spec/rails_admin/config/fields/association_spec.rb +++ b/spec/rails_admin/config/fields/association_spec.rb @@ -4,15 +4,26 @@ describe '#pretty_value' do let(:player) { FactoryBot.create(:player, name: '
', team: FactoryBot.create(:team)) } let(:field) { RailsAdmin.config('Team').fields.detect { |f| f.name == :players } } - let(:view) { ActionView::Base.empty.tap { |d| allow(d).to receive(:action).and_return(nil) } } + let(:view) { ActionView::Base.empty } subject { field.with(object: player.team, view: view).pretty_value } context 'when the link is disabled' do + let(:view) { ActionView::Base.empty.tap { |d| allow(d).to receive(:action).and_return(nil) } } + it 'does not expose non-HTML-escaped string' do is_expected.to be_html_safe is_expected.to eq '<br />' end end + + context 'when the value is empty' do + let(:team) { FactoryBot.build :team } + subject { field.with(object: team, view: view).pretty_value } + + it "returns '-' to show emptiness" do + is_expected.to eq '-' + end + end end describe '#removable?', active_record: true do