2012-02-29 3 views
22

Ruby 스크립트를 호출하는 데 사용되는 Sinatra와 Haml을 사용하여 webform을 작성했습니다.보기 파일을 호출 할 때 인수를 전달하는 방법은 무엇입니까?

Sinatra/Ruby 스크립트에서 Haml보기 파일에 인수를 전달해야합니다. 스크립트가 arror가 발생

#!/usr/bin/env ruby 
require 'rubygems' 
require 'sinatra' 
require 'haml' 

get '/' do 
    haml :index 
end 

post '/' do 
    name = params[:name] 
    vlan = params[:vlan] 

    tmp = nil 
    tmp = %x[./wco-hosts.rb -a -n #{name} -v #{vlan}] 

    if tmp.include?("Error") 
    haml :fail 
    else 
    haml :success 
    end 
end 

경우는 단어 "오류"를 포함하는 문자열을 반환합니다 : 여기

내 코드의 일부이다. 이런 일이 발생하면 사용자에게 오류 페이지를 표시하는 Haml 파일을 호출합니다. 스크립트가 오류가 발생하지 않으면 성공 페이지를 반환합니다.

사용자가 추가 한 새 VM의 이름을 성공/실패 페이지에 포함하고자합니다. 내 문제는 내가 두 Haml 파일에서 그것을 전달하는 방법에 대한 단서가 없다는 것입니다. 나는 해결책을 찾았지만 아무 것도 찾지 못했습니다.

답변

33

당신은 :locals 키를 사용하여 HAML 방법에 대한 매개 변수의 해시 전달할 수 있습니다

get '/' do 
    haml :index, :locals => {:some_object => some_object} 
end 

당신의 HAML 파일의 루비 코드가 some_object에 액세스 할 수 있습니다이 방법을하고, 호출 방법 등 거기에 무엇이든 콘텐츠를 렌더링 .

+0

는 완벽하게 작동을 매우 감사합니다 많이 (투표!) – Cocotton

+0

이것은 레이아웃에도 적용됩니까? 'haml : index, : layout => : common_layout, : locals => {: object => my_object}'이면'object' 로컬 변수가'common_layout' 템플릿에 정의됩니까? – Alexey

1
을 감안할 때

haml(template, options = {}, locals = {}) 

나는 시도 할 것

,
haml :success, {}, {my_var: my_value} 
7

Haml은 전달 변수를 지역 변수로 지원합니다.

haml :fail, :locals => {:vm_name => name} 

을하고 뷰에서, locals[:vm_name]하거나 vm_name를 사용하여 변수를 참조 :시나, 당신은과 같이이 지역 주민을 보낼 수 있습니다. 내가시나 + Markaby이하고 있어요

+0

gre와 같은 말로 여전히 고맙다. (투표!) – Cocotton

+0

예상대로 작동한다. 감사합니다 @ sgtFlot – harsha

4

, 나는 그것이 HAML와 동일해야한다고 생각 :

루비 스크립트에서

: @var = 'foo' 템플릿에서

가 : User name: #{@var}

관련 문제