2014-09-26 3 views
1

HAML 페이지로 전달할 해시 배열이 있습니다.HAML의 해시 루비 배열을 반복합니다.

array = [{"name" => "a", "age" => 1}, {"name" => "b", "age" => 2}] 

이 정보를 반복하여 표시하고 싶습니다. 나는 이것을 시도했다

#{locals[:array]}.each do |#{:value}| 
%h2 #{:value["name"]} 

그러나 작동하지 않는다. 전체 해시의 값이 표시됩니다. 어떻게 이러한 요소들을 반복하고 표시합니까?

는 의사, 나는 다음을 수행 할 :

for each element in array: 
print element["name"] // I want to display this information in different HTML tags. 
print element["age"] 

UPDATE : 이것은 내 HAML 파일입니다.

!!! 
%html 
    %head 
    %link{:href => "css/batchscreen.css", :rel => "stylesheet", :type => "text/css"}/ 
    %body 
    .container 
     locals[:array].each do |element| 
     .story 
     %h2 Name: #{element['name']} 

답변

2

귀하의 문제는 당신이 그것의 문자열을 중괄호에서 무엇이든 받아 만드는 문자열 보간#{}를 사용하는 것입니다 (호출 to_s 나는 믿는다. "each"를 사용하면 문자열을 반복 할 수 있습니다. |#{:value}|과 동일합니다.

결론 : 문자열 (문자 시퀀스)에 무언가를 포함하려는 경우에만 #{}을 사용하십시오. 귀하의 경우에는

, 당신은, 게다가

- locals[:array].each do |element| 
    %h2 Name: #{element['name']}, Age: #{element['age']} 

(당신이 적절한 들여 쓰기를해야한다는 인식)

array = [{:name => "a", :age => 1}, {:name => "b", :age => 2}] 
같이 해시 키에 대한 기호를 사용하여 고려하여 HAML 템플릿에 다음을 작성하려면

array = [{name: "a", age: 1}, {name: "b", age: 2}] 

그리고 문자열 인터폴을 조정 (루비의 최신 버전 포함)

또는 이에 따라 (%h2) 표제어 (#{element[:name]}과 같이됩니다.

+0

내 바보 같은 질문에 죄송합니다. haml 파일로 질문을 업데이트했습니다. ''정의되지 않은 지역 변수 또는 메소드''요소 ''오류가 발생합니다. 코드가 나오기 전에'-'는 무엇입니까? 코드에 그 코드를 넣어야합니까? – adijo

+2

haml 템플릿 (http://haml.info/docs/yardoc/file.REFERENCE.html#running_ruby_)에서 루비 코드를 실행합니다. – Felix

2

다음 그것을 수행해야합니다

- array.each do |elem| 
    %h2 name : #{elem["name"]}, age: #{elem["age"]} 
+0

''''''''''에 대해 정의되지 않은 지역 변수 나 메소드'elem '가 다음과 같은 오류가 있습니다.'''''''''는'''locals''의 HAML 부분에 있으므로''' '# {locals [: array]}. 각각 do | elem | '''대신'''array.each do | elem |''' – adijo