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

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

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 [email protected]
    #{@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).

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 [email protected]
    #{@ary.at(x)}

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

- for x in [email protected]
  = @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:

1 4 9 16