maiconsanson
maiconsanson

Reputation: 249

SLIM template in Rails: How to render html element from instance variable?

How to create a html element from controller in SLIM templates?

I will explain:

In my views, I want to change the "h1" html tag by some conditions.

But I want to put the logic inside controller.

case params[:controller] when "recipes", "chefs"
    case params[:action] when "show", "index"
      @h_number = "h2"
    else
      @h_number ="h1"
    end
  else
    @h_number ="h1"
end

In my SLIM view, I would like something like that:

= @h_number#logo
    = link_to image_tag("image.png"), root_path

Which results in:

<h1 id="logo"><a href="/"><img src="image.png"></a></h2>

or

<h2 id="logo"><a href="/"><img src="image.png"></a></h2>

Is it possible?

Am I clear? Sorry about my english.

Upvotes: 1

Views: 8196

Answers (1)

SMathew
SMathew

Reputation: 4003

I highly doubt this is possible. But you could always create a helper method to do this

In your application helper file,

module ApplicationHelper
    def logo
        num = case params[:controller] when "recipes", "chefs"
          case params[:action] when "show", "index" then 2 end
        end || 1

        "<h#{num}>" + link_to(image_tag("image.png"), root_path) + "</h#{num}>"
    end
end

In your template

body
  header
    == logo

And your controllers don't need anything.

Upvotes: 3

Related Questions