Ruby on Rails 5.2 - ActionView::Base

क्लास एक्शन व्यू :: बेस




ruby

क्लास एक्शन व्यू :: बेस

जनक:
Object
शामिल मॉड्यूल:
ActionView :: हेल्पर्स , ERB::Util ActionView::Context , ActionView::Context

एक्शन व्यू Base

एक्शन व्यू टेम्प्लेट कई तरह से लिखे जा सकते हैं। यदि टेम्प्लेट फ़ाइल में एक .erb एक्सटेंशन है, तो यह erubi टेम्पलेट सिस्टम का उपयोग करता है जो रूबी को HTML दस्तावेज़ में एम्बेड कर सकता है। यदि टेम्प्लेट फ़ाइल में एक। .builder एक्सटेंशन है, तो जिम वेइरिच के बिल्डर :: XmlMarkup लाइब्रेरी का उपयोग किया जाता है।

आप <% %> , <% -%> , और <%= %> जैसे एम्बेडिंग का उपयोग करके ERB को ट्रिगर करते हैं। आउटपुट चाहते समय <%= %> टैग सेट का उपयोग किया जाता है। नामों के लिए निम्नलिखित लूप पर विचार करें:

<b>Names of all the people</b>
<% @people.each do |person| %>
  Name: <%= person.name %><br/>
<% end %>

लूप को नियमित एम्बेडिंग टैग <% %> में सेटअप किया गया है, और आउटपुट आउटपुट एम्बेडिंग टैग <%= %> का उपयोग करके नाम लिखा गया है। ध्यान दें कि यह केवल एक उपयोग सुझाव नहीं है। नियमित आउटपुट फ़ंक्शंस जैसे प्रिंट या पुट ईआरबी टेम्प्लेट के साथ काम नहीं करेंगे। तो यह गलत होगा:

<%# WRONG %>
Hi, Mr. <% puts "Frodo" %>

यदि आप पूरी तरह से एक समारोह का उपयोग कर के भीतर से लिखना चाहिए।

जब एक पंक्ति पर जिसमें केवल टैग के अलावा व्हाट्सएप होता है, तो <% %> अग्रणी और अनुगामी व्हाट्सएप को शामिल करता है, जिसमें अनुगामी न्यूलाइन शामिल है। <% %> और <%- -%> समान हैं। ध्यान दें कि <%= %> और <%= -%> अलग हैं: केवल बाद वाले को पीछे आने वाले व्हाट्सएप को हटा देता है।

उप टेम्पलेट का उपयोग करना

उप टेम्प्लेट का उपयोग करने से आप थकाऊ प्रतिकृति को दरकिनार कर सकते हैं और साझा टेम्पलेट्स में आम प्रदर्शन संरचनाओं को निकाल सकते हैं। क्लासिक उदाहरण एक हेडर और फुटर का उपयोग है (भले ही एक्शन पैक-तरीका Layouts का उपयोग करने के लिए होगा):

<%= render "shared/header" %>
Something really specific and terrific
<%= render "shared/footer" %>

जैसा कि आप देखते हैं, हम रेंडरिंग विधियों के लिए आउटपुट एम्बेडिंग का उपयोग करते हैं। रेंडर कॉल अपने आप ही रेंडरिंग का परिणाम बताते हुए एक स्ट्रिंग लौटा देगा। आउटपुट एम्बेडिंग इसे वर्तमान टेम्प्लेट में लिखता है।

लेकिन आपको खुद को स्थिर में शामिल करने की आवश्यकता नहीं है। टेम्पलेट नियमित एम्बेडिंग टैग का उपयोग करके परिभाषित चर का उपयोग करके स्वयं के बीच चर साझा कर सकते हैं। ऐशे ही:

<% @page_title = "A Wonderful Hello" %>
<%= render "shared/header" %>

अब हेडर @page_title वैरिएबल पर ले जा सकता है और इसका उपयोग शीर्षक टैग आउटपुट के लिए कर सकता है:

<title><%= @page_title %></title>

स्थानीय वेरिएबल्स को सब टेम्प्लेट में पास करना

आप कुंजी और मान के रूप में ऑब्जेक्ट के रूप में चर नामों के साथ हैश का उपयोग करके स्थानीय वेरिएबल्स को उप टेम्प्लेट में पास कर सकते हैं:

<%= render "shared/header", { headline: "Welcome", person: person } %>

इन्हें अब shared/header में एक्सेस किया जा सकता है:

Headline: <%= headline %>
First name: <%= person.first_name %>

उप-टेम्प्लेटों को पास किए गए स्थानीय चर को local_assigns हैश का उपयोग करके हैश के रूप में एक्सेस किया जा सकता है। इससे आप चरों को एक्सेस कर सकते हैं:

Headline: <%= local_assigns[:headline] %>

यह उन मामलों में उपयोगी है, जहां आप सुनिश्चित नहीं हैं कि स्थानीय चर सौंपा गया है या नहीं। वैकल्पिक रूप से, आप defined? headline उपयोग भी कर सकते हैं defined? headline पहली जाँच करने के लिए defined? headline कि क्या चर का उपयोग करने से पहले असाइन किया गया है।

Template कैशिंग

डिफ़ॉल्ट रूप से, रेल्स इसे प्रस्तुत करने के लिए प्रत्येक टेम्पलेट को एक विधि में संकलित करेंगे। जब आप एक टेम्पलेट बदलते हैं, तो रेल फ़ाइल के संशोधन समय की जांच करेगी और इसे विकास मोड में फिर से स्थापित करेगी।

निर्माता

बिल्डर टेम्पलेट ईआरबी के लिए अधिक प्रोग्रामेटिक विकल्प हैं। वे XML सामग्री उत्पन्न करने के लिए विशेष रूप से उपयोगी हैं। xml नाम से XmlMarkup ऑब्जेक्ट स्वचालित रूप से। .builder एक्सटेंशन के साथ टेम्पलेट्स के लिए उपलब्ध कराया जाता है।

यहाँ कुछ बुनियादी उदाहरण दिए गए हैं:

xml.em("emphasized")                                 # => <em>emphasized</em>
xml.em { xml.b("emph & bold") }                      # => <em><b>emph &amp; bold</b></em>
xml.a("A Link", "href" => "http://onestepback.org")  # => <a href="http://onestepback.org">A Link</a>
xml.target("name" => "compile", "option" => "fast")  # => <target option="fast" name="compile"\>
                                                     # NOTE: order of attributes is not specified.

ब्लॉक वाली किसी भी विधि को ब्लॉक में नेस्टेड मार्कअप के साथ एक्सएमएल मार्कअप टैग माना जाएगा। उदाहरण के लिए, निम्नलिखित:

xml.div do
  xml.h1(@person.name)
  xml.p(@person.bio)
end

कुछ इस तरह का उत्पादन होगा:

<div>
  <h1>David Heinemeier Hansson</h1>
  <p>A product of Danish Design during the Winter of '79...</p>
</div>

यहाँ एक पूरी लंबाई की आरएसएस उदाहरण वास्तव में बेसकैंप पर इस्तेमाल किया गया है:

xml.rss("version" => "2.0", "xmlns:dc" => "http://purl.org/dc/elements/1.1/") do
  xml.channel do
    xml.title(@feed_title)
    xml.link(@url)
    xml.description "Basecamp: Recent items"
    xml.language "en-us"
    xml.ttl "40"

    @recent_items.each do |item|
      xml.item do
        xml.title(item_title(item))
        xml.description(item_description(item)) if item_description(item)
        xml.pubDate(item_pubDate(item))
        xml.guid(@person.firm.account.url + @recent_items.url(item))
        xml.link(@person.firm.account.url + @recent_items.url(item))

        xml.tag!("dc:creator", item.author_name) if item_has_creator?(item)
      end
    end
  end
end

बिल्डर के बारे में अधिक जानकारी के लिए कृपया स्रोत कोड से परामर्श करें।

गुण

view_renderer [RW]

पब्लिक क्लास के तरीके

cache_template_loading () स्रोत दिखाएं
# File actionview/lib/action_view/base.rb, line 171
def cache_template_loading
  ActionView::Resolver.caching?
end
cache_template_loading = (मान) स्रोत दिखाएं
# File actionview/lib/action_view/base.rb, line 175
def cache_template_loading=(value)
  ActionView::Resolver.caching = value
end