Подтвердить что ты не робот

Как передать аргумент при вызове файла вида?

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

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

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

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

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

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

4b9b3361

Ответ 1

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

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

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

Ответ 2

Haml поддерживает проходящие переменные как локальные. С Sinatra вы можете отправить этих локальных жителей так:

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

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

Ответ 3

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

В Ruby script: @var = 'foo'

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

Ответ 4

Учитывая

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

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

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