2012-02-17 31 views
11

Tanımlanmış iki eylemi olan bir ray denetleyicim var: index ve show. index eyleminde tanımlanmış bir örnek değişkenim var.Bir denetleyicinin tüm eylemleri için aynı örnek değişkeni

def index 
    @some_instance_variable = foo 
end 

def show 
    # some code 
end 

nasıl @some_instance_variableshow.html.erb şablonunda erişebilir: Kod şey aşağıda gibidir?

cevap

10

index eyleminden show.html.erb görüntülemezseniz, gösterme eyleminde de @some_instance_variable değerini ayarlamanız gerekir. Bir denetleyici eylemi çalıştırıldığında, eşleşen yöntemi çağırır - show eylemi kullanırken index yönteminizin içeriği çağrılmaz. Hem index ve show eylemlerde aynı şey @some_instance_variable set gerekiyorsa

, doğru yolu örnek değişkeni ayarlar index ve show ikisi tarafından adlandırılan başka bir yöntemi, tanımlamak olacaktır.

def index 
    set_up_instance_variable 
end 

def show 
    set_up_instance_variable 
end 

private 

def set_up_instance_variable 
    @some_instance_variable = foo 
end 

set_up_instance_variable yöntem özel yapılması joker yolları varsa denetleyici eylem olarak adlandırılan önler (yani match ':controller(/:action(/:id(.:format)))')

+1

TeşekkürlerEmily. Ama bunu yapmanın bir DRY-er yolu var mı? – Red

+0

TeşekkürlerEmily ben de aynı şeyi arıyordum. Şerefe! – Aashish

+0

Sadece 'before_action: set_up_instance_variable 'ı ekleyin, sadece: [: show,: index]' kontrol cihazına. Bu, belirttiğiniz işlemlerden önce "set_up_instance_variable" komutunu çalıştıracaktır. – domi91c

52

Sen

class FooController < ApplicationController 
    before_filter :common_content, :only => [:index, :show] 

    def common_content 
    @some_instance_variable = :foo 
    end 
end 

Şimdi @some_instance_variable index veya show eylemlerinden render (partials dahil) tüm şablonlardan erişilebilir olacaktır .: ör filtrenin önce kullanarak birden eylemler için örnek değişkenleri tanımlayabilirsiniz.

+4

Bu, daha iyi cevap! –

+0

Çok kuru. Güzel! – Red

+0

@Mori Yöntemi/nesneyi özel veya korumalı veya kamusal alana yerleştirip yerleştirmeyeceğinize karar vermek için neler yapmanız gerekir? Thks! – Red