2009-08-25 19 views
27

पर आधारित रेल सशर्त ('अगर') विवरण, ऐसा करने का एक बेहतर तरीका हो सकता है, लेकिन मैं मौजूदा कार्रवाई के आधार पर रेल में एक कथन कथन करने की कोशिश कर रहा हूं, यह नियंत्रक में होगा (यह इच्छा एक दृश्य में इस्तेमाल किया जाना चाहिए)।नियंत्रक कार्रवाई

उदाहरण के लिए, यदि इसका संपादन पृष्ठ, या शो पेज इत्यादि। मुझे कुछ के लिए एक अलग शैली चाहिए - क्या कोई ऐसा कथन है जो इसे निर्दिष्ट कर सकता है?

(मुझे एक कथन की आवश्यकता है, क्योंकि इसका उपयोग आंशिक रूप से, एकाधिक पृष्ठों पर किया जाता है)।

धन्यवाद!

इलियट

उत्तर

47

params हैश कि उपलब्ध है में नियंत्रक :controller और :action कुंजी है, जो अनुरोध के नियंत्रक और कार्रवाई के नामों का उल्लेख होता है।

इसलिए आप कह सकते हैं

if params[:action] == "foo" 
    # Show stuff for action 'foo' 
elsif params[:action] == "bar" 
    # Show stuff for action 'bar' 
elsif ... 
    # etc. 
end 
+1

बहुत बढ़िया धन्यवाद !!!! – Elliot

+1

बहुत धन्यवाद ... भविष्य से संदेश: डी –

3

आप इसे इस तरह से कर सकते हैं:

class ApplicationController < ActionController::Base 
    layout :set_layout 

    def set_layout 
    case params[:action] 
    when "foo" 
     "foo_layout" 
    when "bar" 
     "bar_layout" 
    ... 
    else 
     "default_layout" 
    end 
    end 

    ... 

end 

आशा है कि यह = मदद करता है)

+0

यह केवल पृष्ठ के पूरे लेआउट के लिए काम करता है, है ना? प्रश्न के अनुसार आंशिक रूप में अगर एक के बजाय। – Shadwell

+0

मैंने कोड नियंत्रक को कोड संपादित किया है। उस स्थिति में, चूंकि क्रियाएं विभिन्न नियंत्रकों के दौरान उपयोग की जाती हैं, इसलिए यह अब बेहतर समझ में आता है =) – Staelen

+0

यह अभी भी पृष्ठ के लिए लेआउट सेट करता है, है ना? – Shadwell

1

आप partials भी के लिए लेआउट का उपयोग कर सकते हैं:

<%= render :partial => 'some_partial', :layout => 'wrap_with_stuff' %> 

यदि आप टी चाहते हैं o गतिशील रूप से उपयोग करने के लिए कौन सा लेआउट काम करता हूं मैं इसे एक सहायक में डाल दूंगा। तो आप

# In your view 

<%= render :partial => 'some_partial', :layout => layout_for_my_partial %> 

# In your helper 

def layout_for_my_partial 
    params[:action] == 'show' ? 'show_wrapper' : 'everything_else_wrapper' 
end 

यह केवल कुछ परिस्थितियों में काम करेगा, लेकिन हो सकता है कि आप ऐसा करने का प्रयास कर रहे हों।

यहां और देखें।

http://ryandaigle.com/articles/2007/8/3/what-s-new-in-edge-rails-partials-get-layouts

18

यह अच्छा अभ्यास IMO पूछ क्या वर्तमान नियंत्रक और कार्रवाई के नाम हैं partials के लिए नहीं है। सोचो "बताओ, मत पूछो" (http://www.pragprog.com/articles/tell-dont-ask)। आंशिक रूप से इसके राज्य के बारे में आंशिक पूछने के बजाय, बताएं कि आप इसे क्या करना चाहते हैं।

एक तरह से यह करने के लिए locals विकल्प के माध्यम से आंशिक करने के लिए चर पारित करके है:

<%= render :partial => "/common/toolbar", :locals => {:edit => true} %> 
आंशिक में

तब:

<% if defined?(edit) && edit %> 
... stuff appropriate to edit mode 
<% end %> 
संबंधित मुद्दे