2009-09-11 20 views
6

में क्यों काम नहीं करते हैं, मैं अपने नियंत्रक को कुछ उदाहरण चर जोड़ना चाहता हूं, क्योंकि प्रश्न में चर एक से अधिक क्रियाओं के भीतर से आवश्यक हैं। हालांकि, नीचे दिया गया उदाहरण काम नहीं करता है जैसा कि मैं उम्मीद करता हूं।मेरे नियंत्रक के आवृत्ति चर दृश्यों (रेल)

class ExampleController < ApplicationController 
    @var1 = "Cheese" 
    @var2 = "Tomato" 

    def show_pizza_topping 
    # What I want is the above instance vars from within the view here 
    end 

    def show_sandwich_filling 
    # What I want is the above instance vars from within the view here 
    end 
end 

जैसा कि मैं इसे समझता हूं, रेल नियंत्रक से इंस्टेंस चर लेता है और उन्हें दृश्य में उपलब्ध कराता है। यदि मैं क्रिया विधियों के भीतर समान चर निर्दिष्ट करता हूं, तो यह ठीक काम करता है - लेकिन मैं इसे दो बार नहीं करना चाहता हूं। मेरा रास्ता क्यों काम नहीं करता है?

(नोट: यह एक बकवास उदाहरण का एक सा है, लेकिन मुझे आशा है कि यह बनाता है भावना)

संपादित करें: When do Ruby instance variables get set?

संपादित करें 2: मैं इस सवाल का जवाब यहाँ मिल गया है जब पहले_फिल्टर और प्रारंभिक विधि जैसे फ़िल्टर का उपयोग करने का सबसे अच्छा समय है?

उत्तर

10

इस प्रकार की चीजें before_filter में संभाली जानी चाहिए। फ़िल्टर से पहले, जैसा कि नाम का तात्पर्य है, एक ऐसी विधि है जिसे किसी भी क्रिया से पहले बुलाया जाएगा, या केवल आप ही घोषित करेंगे। एक उदाहरण:

class ExampleController < ApplicationController 

    before_filter :set_toppings 

    def show_pizza_topping 
    # What I want is the above instance vars from within the view here 
    end 

    def show_sandwich_filling 
    # What I want is the above instance vars from within the view here 
    end 

protected 

    def set_toppings 
    @var1 = "Cheese" 
    @var2 = "Tomato" 
    end 

end 

या, आप अपने before_filter केवल अपने कार्यों में से एक

before_filter :set_toppings, :only => [ :show_pizza_topping ] 

आशा इस मदद करता है पर काम हो सकता था।

संपादित करें: filters in ActionController पर कुछ और जानकारी यहां दी गई है।

+0

हां यह करता है, धन्यवाद। हालांकि, इसे पोस्ट करने के कुछ ही समय बाद मुझे एक और जवाब मिला (मैंने इसे प्रतिबिंबित करने के लिए प्रश्न अपडेट किया)। पहले_फिल्टर और/या प्रारंभ करने का सबसे अच्छा समय कब होता है? –

+0

मैं कहूंगा कि आपको पहले_फिल्टर का उपयोग करना चाहिए यदि यह किसी भी तरह का सेट अप काम है जिसे कई क्रियाओं पर काम करना है। – theIV

+0

टिप्पणी का एक उदाहरण के रूप में मैंने अभी छोड़ा है, जब कोई यह सत्यापित करता है कि कोई व्यक्ति लॉग इन है, तो आपके पास आमतौर पर 'एप्लिकेशन कंट्रोलर' में एक विधि हो सकती है और उपयोगकर्ता को लॉग इन करने की आवश्यकता वाले किसी भी क्रिया के लिए 'first_filter' लागू हो सकता है। प्रत्येक क्रिया में उस कोड को समझने के लिए समझें जिसमें किसी को लॉग इन करने की आवश्यकता है। – theIV

2

वे उदाहरण चर नहीं हैं, है ना?

class A 
    @x = 5 
    def f 
    puts @x 
    end 
end 

A.new.f 
=> nil 

आप कक्षा-स्तर पर इसे परिभाषित कर रहे हैं, उदाहरण के स्तर पर नहीं। जैसा कि "आईआईवी" बताता है, आपको उन्हें एक आवृत्ति विधि के अंदर असाइन करने की आवश्यकता है।

+0

मैं गलत धारणा के तहत था कि आप इसे इस तरह से कर सकते हैं जैसे कि सी # या जावा: वर्ग उदाहरण नियंत्रक { निजी स्ट्रिंग var1 = "पनीर"; // ... } –

+0

जावा में, आप एक आवृत्ति चर घोषित कर रहे हैं; रुबी में, आप चर घोषित नहीं किए जाते हैं, इसलिए कोई वास्तविक समतुल्य नहीं है। रूबी "कक्षा" के अंदर कुछ भी .. "अंत" मूल रूप से मूल्यांकन किया जाता है, इसलिए यह जावा स्थिर प्रारंभिक के बराबर सोचने में मदद कर सकता है। – Ken

संबंधित मुद्दे