2015-05-19 18 views
11

Ruby on Rails'de global bir değişkeni nasıl bildirebilirim? Ruby on Rails'de global bir değişkeni nasıl bildirebilirim?

Benim örnek kod: içinde

benim controller#application.rb: Bu bağlantı ile benim layout#application.html.haml Ben kenar çubuğunda

def user_clicked() 
    @current_userid = params[:user_id] 
end 

: içinde

= link_to "John", user_clicked_path(:user_id => 1) 
= link_to "Doe", user_clicked_path(:user_id => 2) 
= link_to "View clicked user", view_user_path 

benim views#view_user.html.haml:

%h2 @current_userid 

Denetleyicimi değiştirebilen ve denetleyici, görünümler vb. Gibi herhangi bir yerde kullanabilen bir genel değişken bildirmek istiyorum. Yukarıdaki örnek yalnızca bir örnek senaryodur. John veya Doe bağlantısını tıklarsam, denetleyiciye bir user_id gönderir ve "Tıklanan kullanıcıyı görüntüle" bağlantısını tıklattığımda, son tıklanan bağlantıyı görüntüler. Bu, John=1 veya Doe=2'dur.

Tabii ki önce "Tıklanan kullanıcıyı görüntüle" bağlantısını tıklarsam, nil gösterecektir. Yakut küresel değişkenler olarak

+1

Üzgünüz, sorunuzu anlamadım. – Surya

+0

[Bu] 'yı denetleyin (http://stackoverflow.com/questions/12112765/how-to-reference-global-variables-and-class-variables) – Abhi

+0

Merhaba ... Kötü dilbilgisi için üzgünüm^_^Düzenledim Soru^_^ve örnek senaryo. Söylemeye çalıştığım şey, herhangi bir yere erişebildiğim global bir değişken istiyorum. Yukarıdaki örnekte olduğu gibi, John veya Doe bağlantısını tıklatırsam, denetleyiciye bir user_id gönderir ve "Tıklanan kullanıcıyı görüntüle" bağlantısını tıklattığımda, son tıklanan bağlantıyı gösterir, ya John = 1 veya Doe = 2. Öncelikle "Tıklanan kullanıcıyı görüntüle" bağlantısını tıklarsam, sıfır gösterecektir.^_^Lütfen yardım edin^_^ –

cevap

19

nadiren a number of reasons için kullanılan bakınız $

$foo = 'bar' 

ile tanımlayıcı prefixing tarafından ilan edilir. Ve gerçekten aradığın şey değil. Yakut örnek değişkenler

@ ile bildirilir:

class DemoController 
    def index 
    @some_variable = "dlroW olleH" 
    @some_variable = backwards 
    end 
    private 
    def backwards 
    @some_variable.reverse 
    end 
end 

Raylar otomatik görünüşüdür bağlamına denetleyicisinin örnek değişkenler geçer.

# /app/views/demos/index.html.haml 
%h1= @some_variable 

Çıktılarını tahmin edin ve size bir çerez vereceğim.

Örneğinizde @global_variable, controller#sample_1 arandığından beri sıfırdır - istek controller#sample_2'dan geçer.

def sample_2 
    @global_variable = "Helloword" 
end 
+0

Merhaba ... Cevabınız için teşekkür ederim^_^Yukarıdaki soruyu düzenledim^_^ve örnek senaryoyu değiştirdim. Söylemeye çalıştığım şey, herhangi bir yere erişebildiğim global bir değişken istiyorum. John veya Doe bağlantısını tıklatırsam, denetleyiciye bir user_id gönderir ve "Tıklanan kullanıcıyı görüntüle" bağlantısını tıklattığımda, en son tıklanan bağlantıyı gösterir, ya John = 1 veya Doe = 2 olur. Öncelikle "Tıklanan kullanıcıyı görüntüle" bağlantısını tıklarsam, sıfır gösterecektir. Üzgün ​​dilbilgilerim için üzgünüm^_^ –

+0

Aradığın şeyin oturumlar olabileceğini düşünüyorum http://guides.rubyonrails.org/action_controller_overview.html # session – max

+0

Bu oturumlar için teşekkürler^_^... Denedim ve şimdi her yerde kullanıyorum ... session [: global_variable] –