Ruby code in Haml

Hi:

How do I embed Ruby code in Haml? I am passing an array via a get
request. The array can be displayed using
%p #{@ary}

However, if I try..

for x in 0...#{@ary.length}
print #{@ary.at(x)}
end

I get an error, undefined variable x. What is going on?

cz

You need '-' at the start of a line with ruby code otherwise haml just passes it through Also indentation is important.

     - for x in 0..@ary.length
        #{@ary.at(x)}

e.g.

   % (echo '- for x in 0..5' ; echo ' #{x}') | haml
   1
   2
   3
   4
   5

you don't need the 'end' that you do in normal ruby as the indentation defines the block (much like in python).

···

On 17/02/11 12:06, cz wrote:

Hi:

How do I embed Ruby code in Haml? I am passing an array via a get
request. The array can be displayed using
%p #{@ary}

However, if I try..

for x in 0...#{@ary.length}
print #{@ary.at(x)}
end

I get an error, undefined variable x. What is going on?

cz

James Brister wrote in post #982179:

You need '-' at the start of a line with ruby code otherwise haml just
passes it through Also indentation is important.

     - for x in 0..@ary.length
        #{@ary.at(x)}

I think it's clearer to use regular HAML insertion inside the block,
instead of ruby string expansion:

    - for x in 0..@ary.length
      = @ary.at(x)

And of course, "each" is better here.

    - @ary.each do |elem|
      = elem

Standalone example, showing some nested tags:

$ haml <<EOS
- @ary = [1,4,9,16]
- @ary.each do |elem|
  %tr
    %td= elem
EOS

Output:

<tr>
  <td>1</td>
</tr>
<tr>
  <td>4</td>
</tr>
<tr>
  <td>9</td>
</tr>
<tr>
  <td>16</td>
</tr>

···

--
Posted via http://www.ruby-forum.com/\.