2012-02-29 53 views
22

我用Sinatra和Haml寫了一個webform,用來調用Ruby腳本。如何在調用視圖文件時傳遞參數?

除了一件事情之外,一切看起來都很好:我需要從Sinatra/Ruby腳本傳遞一個參數給Haml視圖文件。

這裏是我的代碼的一部分:

#!/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 

如果腳本遇到arror它會返回一個字符串,包括單詞「錯誤」。如果發生這種情況,我打電話給一個Haml文件,它會向用戶顯示一個錯誤頁面。如果腳本沒有遇到任何錯誤,它將返回一個成功頁面。

我想在成功/失敗頁面中包含用戶添加的新VM的名稱。我的問題是我不知道如何在我的Haml文件中傳遞它。我搜索了一個解決方案,但沒有找到任何東西。

回答

33

可以傳遞的參數使用:locals鍵Haml的方法哈希:

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

這樣在Haml的文件中的Ruby代碼可以訪問some_object和呈現任何內容就在那裏,調用方法等。

+0

可以正常使用,非常感謝你多(投票!) – Cocotton 2012-02-29 18:10:43

+0

這是否也適用於佈局?如果我有'haml:index,:layout =>:common_layout,:locals => {:object => my_object}','common'的局部變量是否會在'common_layout'模板中定義? – Alexey 2012-12-01 12:36:33

1

鑑於

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

我想嘗試

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

Haml支持以當地人身份傳遞變量。隨着西納特拉,你可以把這些當地人像這樣:

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

,並在視圖中,參考使用locals[:vm_name]或者乾脆vm_name變量。

+0

與gre一樣的東西說,還是謝謝你(投票贊成!) – Cocotton 2012-02-29 18:11:37

+0

按預期工作。謝謝@sgtFlot – harsha 2013-04-30 13:29:47

4

我在西納特拉+ Markaby的肩頭這樣做,我認爲它應該是與Haml的:

在Ruby腳本:@var = 'foo'

模板:User name: #{@var}

相關問題