Ruby on Rails 5.2 - ActionView::RecordIdentifier

मॉड्यूल एक्शन व्यू :: RecordIdentifier




ruby

मॉड्यूल एक्शन व्यू :: RecordIdentifier

RecordIdentifier DOM के तत्वों के साथ रिकॉर्ड को संबद्ध करने के लिए विभिन्न ActionView सहायकों द्वारा उपयोग किए जाने वाले तरीकों को RecordIdentifier करता है।

उदाहरण के लिए निम्न कोड पर विचार करें जो पोस्ट का रूप है:

<%= form_for(post) do |f| %>
  <%= f.text_field :body %>
<% end %>

जब post एक नया, सहेजे न गए ActiveRecord::Base उदाहरण, परिणामी HTML है:

<form class="new_post" id="new_post" action="/posts" accept-charset="UTF-8" method="post">
  <input type="text" name="post[body]" id="post_body" />
</form>

जब post एक स्थायी ActiveRecord::Base उदाहरण, परिणामी HTML है:

<form class="edit_post" id="edit_post_42" action="/posts/42" accept-charset="UTF-8" method="post">
  <input type="text" value="What a wonderful world!" name="post[body]" id="post_body" />
</form>

दोनों मामलों में, RecordIdentifier डोम तत्व की id और class स्वचालित रूप से जेनरेट की जाती है, जो RecordIdentifier विधियों dom_id और dom_class द्वारा RecordIdentifier dom_id का dom_class :

dom_id(Post.new)         # => "new_post"
dom_class(Post.new)      # => "post"
dom_id(Post.find 42)     # => "post_42"
dom_class(Post.find 42)  # => "post"

ध्यान दें कि इन विधियों को सख्ती से Post आवश्यकता नहीं है ActiveRecord::Base का एक उपवर्ग ActiveRecord::Base । कोई भी Post क्लास तब तक काम करेगा जब तक उसके उदाहरण to_key और model_name प्रतिक्रिया देते हैं, यह देखते हुए कि model_name प्रतिक्रिया देता है। उदाहरण के लिए:

class Post
  attr_accessor :to_key

  def model_name
    OpenStruct.new param_key: 'post'
  end

  def self.find(id)
    new.tap { |post| post.to_key = [id] }
  end
end

स्थिरांक

शामिल हों
नया

सार्वजनिक प्रवृत्ति के तरीके

dom_class (record_or_class, उपसर्ग = nil) स्रोत दिखाएँ
# File actionview/lib/action_view/record_identifier.rb, line 74
def dom_class(record_or_class, prefix = nil)
  singular = model_name_from_record_or_class(record_or_class).param_key
  prefix ? "#{prefix}#{JOIN}#{singular}" : singular
end

DOM क्लास कन्वेंशन किसी ऑब्जेक्ट या क्लास के एकवचन रूप का उपयोग करना है।

dom_class(post)   # => "post"
dom_class(Person) # => "person"

यदि आपको एक ही दृश्य में एक ही वर्ग के कई उदाहरणों को संबोधित करने की आवश्यकता है, तो आप dom_class को उपसर्ग कर सकते हैं:

dom_class(post, :edit)   # => "edit_post"
dom_class(Person, :edit) # => "edit_person"
dom_id (रिकॉर्ड, उपसर्ग = nil) स्रोत दिखाएँ
# File actionview/lib/action_view/record_identifier.rb, line 89
def dom_id(record, prefix = nil)
  if record_id = record_key_for_dom_id(record)
    "#{dom_class(record, prefix)}#{JOIN}#{record_id}"
  else
    dom_class(record, prefix || NEW)
  end
end

DOM आईडी कन्वेंशन एक अंडरस्कोर निम्नलिखित आईडी के साथ एक वस्तु या वर्ग के एकवचन रूप का उपयोग करने के लिए है। यदि कोई आईडी नहीं मिली है, तो इसके बजाय "new_" के साथ उपसर्ग करें।

dom_id(Post.find(45))       # => "post_45"
dom_id(Post.new)            # => "new_post"

यदि आपको एक ही दृश्य में एक ही वर्ग के कई उदाहरणों को संबोधित करने की आवश्यकता है, तो आप dom_id को उपसर्ग कर सकते हैं:

dom_id(Post.find(45), :edit) # => "edit_post_45"
dom_id(Post.new, :custom)    # => "custom_post"

निजी उदाहरण तरीके

record_key_for_dom_id (रिकॉर्ड) स्रोत दिखाएं
# File actionview/lib/action_view/record_identifier.rb, line 107
def record_key_for_dom_id(record) # :doc:
  key = convert_to_model(record).to_key
  key ? key.join(JOIN) : key
end

एचटीएमएल डोम आईडी में उपयोग के लिए उपयुक्त प्रमुख विशेषता (एस) का एक स्ट्रिंग प्रतिनिधित्व लौटाता है। यदि वांछित हो तो डिफ़ॉल्ट उत्पन्न स्ट्रिंग प्रतिनिधित्व को अनुकूलित करने के लिए इसे ओवरराइट किया जा सकता है। यदि आपको अंतर्निहित डेटाबेस रिकॉर्ड के लिए क्वेरी करने के लिए dom_id से एक कुंजी वापस पढ़ने की आवश्यकता है, तो आपको 'person_record_from_dom_id' की तरह एक सहायक लिखना चाहिए जो डिफ़ॉल्ट कार्यान्वयन के आधार पर कुंजी को निकाल देगा (जो सिर्फ सभी प्रमुख विशेषताओं के साथ जुड़ता है '_') या विधि के अपने स्वयं के लिखित संस्करण पर। डिफ़ॉल्ट रूप से, यह कार्यान्वयन कुंजी स्ट्रिंग को एक विधि से गुजरता है जो सभी आईडी को अमान्य करता है जो कि मान्य हैं। यदि आप इस विधि को अधिलेखित करते हैं, तो आपको यह सुनिश्चित करने की आवश्यकता है कि आपके डोम आईडी वैध हैं।