2012-02-29 1 views
22

Я написал веб-форму, используя 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 

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

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

ответ

33

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

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

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

+0

Работа отлично, спасибо очень много (проголосовали!) – Cocotton

+0

Будет ли это работать и для макета? Если у меня есть 'haml: index,: layout =>: common_layout,: locals => {: object => my_object}', будет ли локальная переменная 'object' определена в шаблоне' common_layout'? – Alexey

1

Учитывая

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

Я хотел бы попробовать

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

Haml поддерживает передачу переменных как местных жителей. С Синатра, вы можете отправить эти местные жители, как так:

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

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

+0

То же, что и gre, все равно спасибо (проголосовали!) – Cocotton

+0

Работает как и ожидалось. Спасибо @sgtFlot – harsha

4

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

В Ruby сценария: @var = 'foo'

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

Смежные вопросы