2012-02-29 8 views
22

Rubyスクリプトの呼び出しに使用するSinatraとHamlを使用してWebフォームを作成しました。ビューファイルを呼び出すときに引数を渡す方法は?

Sinatra/RubyスクリプトからHamlビューファイルに引数を渡す必要があります。ここで

は、私のコードの一部です:

#!/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に遭遇した場合。このような場合は、ユーザーにエラーページを表示するHamlファイルを呼び出しています。スクリプトがアローに遭遇しなければ、成功ページを返します。

成功/失敗ページに、ユーザーが追加した新しいVMの名前を含めたいとします。私の問題は、私は両方のHamlファイルにそれを渡す方法がないということです。私は解決策を探しましたが、何も見つかりませんでした。

答えて

33

あなたがキー:localsを使用してHAMLメソッドへのパラメータのハッシュを渡すことができます。

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

あなたのHAMLファイルでRubyのコードが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は渡す変数をローカルとしてサポートしています。 locals[:vm_name]または単にvm_nameを使用して変数を参照、

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

とビューで:シナトラを使用すると、そのように、これらの地元の人々を送ることができます。

+0

greと同じことが、まだありがとうございました(投票しました!) – Cocotton

+0

期待通りに動作します。ありがとう@sgtFlot – harsha

4

私はシナトラ+ Markabyでこれをやっている、私はそれがHAMLと同じにするべきだと思う:Rubyスクリプトで

:テンプレートで@var = 'foo'

User name: #{@var}

関連する問題