Как передать аргумент при вызове файла представления? - PullRequest
22 голосов
/ 29 февраля 2012

Я написал веб-форму с использованием Sinatra и Haml, которая будет использоваться для вызова сценария Ruby.

Все выглядит хорошо, за исключением одного: мне нужно передать аргумент в файл представления Haml из Sinatra /Сценарий Ruby.

Вот часть моего кода:

#!/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

Если сценарий обнаружит ошибку, он вернет строку, включающую слово «Ошибка».Если это произойдет, я вызываю файл Haml, который покажет пользователям страницу с ошибкой.Если сценарий не обнаружит ошибки, он вернет страницу успеха.

Я хочу включить в страницу успеха / неудачи имя новой виртуальной машины, добавленной пользователем.Моя проблема в том, что я понятия не имею, как передать его в обоих файлах Haml.Я искал решение, но ничего не нашел.

Ответы [ 4 ]

33 голосов
/ 29 февраля 2012

Вы можете передать хэш параметров методу Haml, используя клавишу :locals:

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

Таким образом, код Ruby в вашем Haml-файле может получить доступ к some_object и отрендерить любой контент, вызвать методы и т. Д.

7 голосов
/ 29 февраля 2012

Haml поддерживает передачу переменных как локальных.С помощью Sinatra вы можете отправлять эти локальные данные следующим образом:

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

и в представлении ссылаться на переменную, используя locals[:vm_name] или просто vm_name.

4 голосов
/ 29 февраля 2012

Я делаю это в Sinatra + Markaby, я думаю, что должно быть то же самое с Haml:

В скрипте Ruby: @var = 'foo'

В шаблоне: User name: #{@var}

1 голос
/ 29 февраля 2012

С учетом

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

Я бы попробовал

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