Квадратные скобки идут после объявления тега и содержат в себе объект Ruby, который используется для объявления классов и идентификаторов тега. Класс устанавливается в класс объекта (метод camelCase будет заменен на нижние подчеркивания) и ID устанавливается в класс объекта, после значений методов #to_key
или #id
(именно в таком порядке). Это особенно полезно для элементов, которые представляют экземпляры моделей Active Model. Кроме того, если указан второй аргумент, то он будет использоваться в качестве префикса как для класса, так и для идентификатора. Например:
# file: app/controllers/users_controller.rb
def show
@user = CrazyUser.find(15)
end
-# file: app/views/users/show.haml
%div[@user, :greeting]
%bar[290]/
Hello!
компилируется в
<div class='greeting_crazy_user' id='greeting_crazy_user_15'>
<bar class='fixnum' id='fixnum_581' />
Hello!
</div>
Если вам необходимо, чтобы класс был отличным от указанного класса объекта, то вы можете применить к объекту метод haml_object_ref
:
# file: app/models/crazy_user.rb
class CrazyUser < ActiveRecord::Base
def haml_object_ref
"a_crazy_user"
end
end
-# file: app/views/users/show.haml
%div[@user]
Hello!
компилируется в
<div class='a_crazy_user' id='a_crazy_user_15'>
Hello!
</div>
Атрибут :class
может быть использован совместно со ссылкой на объект. В скомпилированном теге все классы будут объединены и добавлены.
- user = User.find(1)
%p[user]{:class => 'alpha bravo'}
компилируется в
<p id="user_1" class="alpha bravo user"></p>