web-dev-qa-db-ja.com

Hamlで動的IDを作成するにはどうすればよいですか?

#item

id = "item"でdivを作成します

.box#item

class = "box"およびid = "item"でdivを作成します

.box#="item "+x

class = "box"とコメント '#= "item" + x'でdivを作成します

.box#
  ="item"+x

「無効な要素:クラスとIDには値が必要です。」

Idを変数に設定するにはどうすればよいですか?

72
user225643

2つの方法があります。

長い形式の方法(idを通常の属性であるかのように定義します):

.box{:id => "item_#{x}"}

これを生成する(xx.to_sは次のように評価されます):

<div class="box" id="item_x">

短い形式の方法:

.box[x]

xitemのインスタンスであると仮定して、以下を生成します。

<div class="box item" id="item_45">

詳細については、 HAMLリファレンス を参照してください。

130
EmFi

次の方法で、HAMLでidclassを設定できます

  1. 通常の方法

    .box.item#item
    
    <div id="item" class="box item"></div>
    
  2. 補間が必要な場合は、この形式を使用できます

    .box{id: "item_#{123}", class: "item_#{123}"}
    
    <div id="item_123" class="box item_123"></div>
    
  3. この形式は、オブジェクト参照を使用してクラスとIDを生成します

    # app/controllers/items_controller.rb 
    @item = Item.find(123)
    
    .box[@item]
    
    <div id="item_123" class="box item"></div>
    
  4. プレフィックスを付ける必要がある場合

    .box[@item, :custom]
    
    <div id="custom_item_123" class="box custom_item"></div>
    
  5. カスタムクラスとIDの生成が必要な場合は、次のメソッドをモデルに追加する必要があります。

    class CrazyUser < ActiveRecord::Base
      def haml_object_ref
        "customized_item"
      end
    end
    

    そして、あなたはカスタマイズされたクラスを取得します

    .box[@item]
    
    <div id="customized_item_123" class="box customized_item"></div>
    

参照:

5
Deepak Mahakale