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

Coc*_*ton 22 ruby haml sinatra

我使用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
Run Code Online (Sandbox Code Playgroud)

如果脚本遇到一个arror,它将返回一个包含单词"Error"的字符串.如果发生这种情况,我正在调用一个Haml文件,该文件将向用户显示错误页面.如果脚本没有遇到恐怖,它将返回一个成功页面.

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

gre*_*fab 33

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

get '/' do
    haml :index, :locals => {:some_object => some_object}
end
Run Code Online (Sandbox Code Playgroud)

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


sgt*_*oyd 7

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

haml :fail, :locals => {:vm_name => name}
Run Code Online (Sandbox Code Playgroud)

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