2012-02-29 16 views
22

मैंने सिनात्रा और हमल का उपयोग करके एक वेबफॉर्म लिखा था जिसका उपयोग रूबी लिपि को कॉल करने के लिए किया जाएगा।दृश्य फ़ाइल को कॉल करते समय तर्क कैसे पारित करें?

सबकुछ एक चीज़ को छोड़कर ठीक लगता है: मुझे सिनात्रा/रूबी स्क्रिप्ट से एक हैमल व्यू फ़ाइल में एक तर्क पारित करने की आवश्यकता है। स्क्रिप्ट एक arror का सामना करना पड़ता

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

यदि यह शब्द "त्रुटि" सहित एक स्ट्रिंग वापस आ जाएगी:

यहाँ मेरी कोड का एक हिस्सा है। यदि ऐसा होता है, तो मैं एक हैम फ़ाइल को कॉल कर रहा हूं जो उपयोगकर्ताओं को एक त्रुटि पृष्ठ दिखाएगा। यदि स्क्रिप्ट को एक एआरआर नहीं मिलता है, तो यह एक सफल पृष्ठ लौटाएगा।

मैं सफलता/असफल पृष्ठ में, उपयोगकर्ता को जोड़े गए नए वीएम का नाम शामिल करना चाहता हूं। मेरी समस्या यह है कि मुझे कोई संकेत नहीं है कि यह मेरी हैमल फ़ाइलों दोनों में कैसे पास किया जाए। मैंने एक समाधान की खोज की, लेकिन कुछ भी नहीं मिला।

उत्तर

33

आप :locals कुंजी का उपयोग कर Haml विधि के लिए मानकों का एक हैश पारित कर सकते हैं:

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

इस तरह अपने Haml फ़ाइल में रूबी कोड some_object उपयोग कर सकते हैं और प्रस्तुत करना जो कुछ भी सामग्री वहाँ में, कॉल तरीकों आदि है ।

+0

पूरी तरह से काम करते हुए, तुम बहुत धन्यवाद बहुत (वोट किया गया!) – Cocotton

+0

क्या यह एक लेआउट के लिए भी काम करेगा? अगर मेरे पास 'हैमल: इंडेक्स, लेआउट =>: कॉमन_लेआउट, लोकल => {ऑब्जेक्ट => my_object}', 'ऑब्जेक्ट' स्थानीय वैरिएबल को 'common_layout' टेम्पलेट में परिभाषित किया जाएगा? – Alexey

1

को देखते हुए

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

मैं कोशिश करता हूँ

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

हैमल स्थानीय लोगों के रूप में चर पारित करने का समर्थन करता है। सिनात्रा के साथ, आप तो जैसे इन स्थानीय लोगों भेज सकते हैं:

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

और ध्यान में रखते हुए, चर locals[:vm_name] या बस vm_name का उपयोग कर के संदर्भ हैं।

+0

ग्रेट जैसा ही कहा गया है, अभी भी धन्यवाद (वोट अप!) – Cocotton

+0

अपेक्षित के रूप में कार्य करता है। धन्यवाद @sgtFlot – harsha

4

मैं सिनात्रा + Markaby में यह कर रहा हूँ, मुझे लगता है कि यह Haml के साथ एक ही होना चाहिए:

रूबी स्क्रिप्ट में: @var = 'foo'

टेम्पलेट में: User name: #{@var}