调用视图文件时如何传递参数?

我使用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,它将返回一个包含单词“Error”的字符串。 如果发生这种情况,我正在调用一个Haml文件,该文件将向用户显示错误页面。 如果脚本没有遇到错误,它将返回一个成功页面。

我想在成功/失败页面中包含用户添加的新VM的名称。 我的问题是我不知道如何在我的两个Haml文件中传递它。 我搜索了一个解决方案,但没有找到任何东西。

您可以使用:locals键将参数哈希值传递给Haml方法:

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

这样,Haml文件中的Ruby代码可以访问some_object并呈现其中的任何内容,调用方法等。

Haml支持将变量作为本地传递。 使用Sinatra,您可以像这样发送这些当地人:

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

在视图中,使用locals[:vm_name]或简单地使用vm_name引用变量。

我在Sinatra + Markaby这样做,我认为它应该和Haml一样:

在Ruby脚本中: @var = 'foo'

在模板中: User name: #{@var}

特定

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

我试试

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