Как передать аргумент при вызове файла вида?
Я написал веб-форму, используя 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. Я искал решение, но ничего не нашел.
Ответы
Ответ 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}