How do I make dynamic ids in Haml?
Solution 1:
There are two ways:
The long form way (define the id as if it were a regular attribute):
.box{:id => "item_#{x}"}
produces this (x
is what ever x.to_s
evaluates to):
<div class="box" id="item_x">
The short form way:
.box[x]
produces the following assuming x
is an instance of item
:
<div class="box item" id="item_45">
See the HAML reference for more information.
Solution 2:
You can set the id
and class
in HAML the following ways
-
The normal way
.box.item#item
<div id="item" class="box item"></div>
-
If you need to interpolation you can use this format
.box{id: "item_#{123}", class: "item_#{123}"}
<div id="item_123" class="box item_123"></div>
-
This format generates the class and id using the object reference
# app/controllers/items_controller.rb @item = Item.find(123)
.box[@item]
<div id="item_123" class="box item"></div>
-
If you need to prefix something
.box[@item, :custom]
<div id="custom_item_123" class="box custom_item"></div>
-
If you need a custom class and id generation you need to add the following method to model.
class CrazyUser < ActiveRecord::Base def haml_object_ref "customized_item" end end
And then you will get the customized class
.box[@item]
<div id="customized_item_123" class="box customized_item"></div>
Refer:
- http://haml.info/docs/yardoc/file.REFERENCE.html#object-reference-
- http://haml.info/docs/yardoc/file.REFERENCE.html