<div class="promotion_rule promotion-block col-12" id="<%= dom_id promotion_rule %>">
  <% type_name = promotion_rule.class.name.demodulize.underscore %>
  <h6 class='promotion-title <%= 'no-text' if type_name == 'user_logged_in' || type_name == 'first_order'%>'><%= promotion_rule.class.human_attribute_name(:description) %></h6>
  <% if can?(:destroy, promotion_rule) %>
    <%= link_to_with_icon 'trash', '', spree.admin_promotion_promotion_rule_path(@promotion, promotion_rule), remote: true, method: :delete, class: 'delete' %>
  <% end %>

  <% param_prefix = "promotion[promotion_rules_attributes][#{promotion_rule.id}]" %>
  <%= hidden_field_tag "#{param_prefix}[id]", promotion_rule.id %>
  <%= render partial: "spree/shared/error_messages", locals: { target: promotion_rule } %>
  <%= render partial: "spree/admin/promotions/rules/#{type_name}", locals: { promotion_rule: promotion_rule, param_prefix: param_prefix } %>
</div>

<div class="promotion_rule promotion-block col-12" id="<%= dom_id promotion_rule %>">
  <% type_name = promotion_rule.model_name.element %>
  <h6 class='promotion-title <%= 'no-text' if type_name == 'user_logged_in' || type_name == 'first_order'%>'><%= promotion_rule.class.human_attribute_name(:description) %></h6>
  <% if can?(:destroy, promotion_rule) %>
    <%= link_to_with_icon 'trash', '', spree.admin_promotion_promotion_rule_path(@promotion, promotion_rule), remote: true, method: :delete, class: 'delete' %>
  <% end %>

  <% param_prefix = "promotion[promotion_rules_attributes][#{promotion_rule.id}]" %>
  <%= hidden_field_tag "#{param_prefix}[id]", promotion_rule.id %>
  <%= render partial: "spree/shared/error_messages", locals: { target: promotion_rule } %>
  <%= render partial: "spree/admin/promotions/rules/#{type_name}", locals: { promotion_rule: promotion_rule, param_prefix: param_prefix } %>
</div>

Use i18n model_name method for promo rules
Use i18n model_name method for promo rules

Instead of demodulizing we can use the provided i18n method to grab the
element name
