How would you refactor this case statement?
I haven't run this code, but maybe something along these lines:

def new_button
  content_tag(:li, class: "has-form") do
    text = "New #{controller_name.singularize.titleize}"
    path = { controller: controller_name, action: "new" }
    link_to(text, path, class: "button")
  end
end


Using content_tag and link_to is arguably cleaner, and they handle escaping automatically.

Letting the router generate the URL for you from a hash is preferable to doing string manipulation.

The text generation is perhaps inelegant, but simple. If you're using I18n elsewhere in this app I'd consider using that:

model_slug = controller_name.singularize
text = t("new_x", x: t("activerecord.models.#{model_slug}"))


But it's overkill if you're not using it for anything else.