我使用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
如果脚本遇到恐怖,它将返回包含单词“Error”的字符串。如果发生这种情况,我正在调用一个Haml文件,该文件将向用户显示错误页面。如果脚本没有遇到恐怖,它将返回一个成功页面。
我想在成功/失败页面中包含用户添加的新VM的名称。我的问题是我不知道如何在我的两个Haml文件中传递它。我搜索了一个解决方案,但没有找到任何东西。
答案 0 :(得分:33)
您可以使用:locals
键将参数哈希值传递给Haml方法:
get '/' do
haml :index, :locals => {:some_object => some_object}
end
这样,Haml文件中的Ruby代码可以访问some_object
并呈现其中的任何内容,调用方法等。
答案 1 :(得分:7)
Haml支持将变量作为本地传递。使用Sinatra,您可以像这样发送这些当地人:
haml :fail, :locals => {:vm_name => name}
并在视图中,使用locals[:vm_name]
或简称vm_name
来引用变量。
答案 2 :(得分:4)
我在Sinatra + Markaby这样做,我认为它应该和Haml一样:
在Ruby脚本中:@var = 'foo'
在模板中:User name: #{@var}
答案 3 :(得分:1)
鉴于
haml(template, options = {}, locals = {})
我试试
haml :success, {}, {my_var: my_value}