2012-02-29 54 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}

相关问题