Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xcode/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 调用视图文件时如何传递参数?_Ruby_Sinatra_Haml - Fatal编程技术网

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

Ruby 调用视图文件时如何传递参数?,ruby,sinatra,haml,Ruby,Sinatra,Haml,我使用Sinatra和Haml编写了一个Web表单,用于调用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 = para

我使用Sinatra和Haml编写了一个Web表单,用于调用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文件,它将向用户显示一个错误页面。如果脚本没有遇到arror,它将返回一个成功页面


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

您可以使用
:locals
键将参数散列传递给Haml方法:

get '/' do
    haml :index, :locals => {:some_object => some_object}
end
通过这种方式,Haml文件中的Ruby代码可以访问
某些对象
,并呈现其中的任何内容、调用方法等

haml(template, options = {}, locals = {})
我想试试

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

Haml支持将变量作为局部变量传递。有了Sinatra,您可以像这样发送这些本地人:

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

在视图中,使用
locals[:vm_name]
或简单地
vm_name
引用变量,我在Sinatra+Markaby中这样做,我认为它应该与Haml相同:

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


在模板中:
用户名:#{@var}

这对布局也适用吗?如果我有
haml:index,:layout=>:common\u layout,:locals=>{:object=>my\u object}
,那么
object
局部变量是否会在
common\u layout
模板中定义?工作正常。谢谢@sgtFlot