Rails:Slim template subroutine example
From FVue
Problem
How do I use methods/functions/subroutines in Slim template language of Ruby on Rails?
Environment
- rails-7
- slim-5.1.1
Solution
/ app/views/users/show.html.slim / Params - user - content_for(:title) { 'Customer details' } ruby: def do_tbody(user) contents = <<~SLIM - index = 1 tr(class = (index.even? ? 'odd' : 'even')) td.col company name td.col #{user.company_name} - index += 1 tr(class= (index.even? ? 'odd' : 'even')) td.col email td.col #{user.email} SLIM Slim::Template.new { contents }.render end div.table table.table(border=nil cellspacings=nil cellpadding=nil) == do_tbody(user)
Journal
20250821
Trying within helpers/application_helper as well, but error isn't accessible. Solution: put Slim code in template partial shared/_form_errors.html.slim.
def form_errors(obj) return unless obj&.errors&.count&.positive? # tag.hr # tag.ul class: 'text-danger' do # obj.errors.each do |error| # tag.li class: 'text-danger' do # tag.a class: 'text-danger', href: "##{obj.class.name.underscore.gsub('/', '_')}_#{error.attribute}" do # error.full_message # end # end # end # end slim = <<~SLIM hr ul.text-danger - errors.each do |error| li.text-danger a.text-danger href="##{self.class.name&.underscore&.gsub('/', '_')}_#{error.attribute}" / a.text-danger href="{class.name.underscore.gsub('/', '_')}" / error.attribute = error.full_message SLIM Slim::Template.new { slim }.render(obj).html_safe end