[ruby-on-rails] रेल 4 में चिंताओं का उपयोग कैसे करें



Answers

मैं त्वचा-नाइट वसा मॉडल के साथ-साथ आपके मॉडल कोड को डीआरवाई के लिए मॉडल चिंताओं का उपयोग करने के बारे में पढ़ रहा हूं। उदाहरणों के साथ यहां एक स्पष्टीकरण दिया गया है:

1) मॉडल कोड ड्रॉइंग

एक आर्टिकल मॉडल, एक इवेंट मॉडल और एक टिप्पणी मॉडल पर विचार करें। एक लेख या एक घटना में कई टिप्पणियां हैं। एक टिप्पणी या तो लेख या घटना से संबंधित है।

पारंपरिक रूप से, मॉडल इस तरह दिख सकते हैं:

टिप्पणी मॉडल:

class Comment < ActiveRecord::Base
  belongs_to :commentable, polymorphic: true
end

अनुच्छेद मॉडल:

class Article < ActiveRecord::Base
  has_many :comments, as: :commentable 

  def find_first_comment
    comments.first(created_at DESC)
  end

  def self.least_commented
   #return the article with least number of comments
  end
end

इवेंट मॉडल

class Event < ActiveRecord::Base
  has_many :comments, as: :commentable 

  def find_first_comment
    comments.first(created_at DESC)
  end

  def self.least_commented
   #returns the event with least number of comments
  end
end

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

इसके लिए ऐप / मॉडल / चिंताओं में एक टिप्पणी योग्य.आरबी फ़ाइल बनाएं।

module Commentable
  extend ActiveSupport::Concern

  included do
    has_many :comments, as: :commentable
  end

  # for the given article/event returns the first comment
  def find_first_comment
    comments.first(created_at DESC)
  end

  module ClassMethods
    def least_commented
      #returns the article/event which has the least number of comments
    end
  end
end

और अब आपके मॉडल इस तरह दिखते हैं:

टिप्पणी मॉडल:

class Comment < ActiveRecord::Base
  belongs_to :commentable, polymorphic: true
end

अनुच्छेद मॉडल:

class Article < ActiveRecord::Base
  include Commentable
end

इवेंट मॉडल:

class Event < ActiveRecord::Base
  include Commentable
end

2) त्वचा नाइटिंग फैट मॉडल।

एक इवेंट मॉडल पर विचार करें। एक कार्यक्रम में कई उपस्थिति और टिप्पणियां होती हैं।

आम तौर पर, घटना मॉडल इस तरह दिख सकता है

class Event < ActiveRecord::Base   
  has_many :comments
  has_many :attenders


  def find_first_comment
    # for the given article/event returns the first comment
  end

  def find_comments_with_word(word)
    # for the given event returns an array of comments which contain the given word
  end 

  def self.least_commented
    # finds the event which has the least number of comments
  end

  def self.most_attended
    # returns the event with most number of attendes
  end

  def has_attendee(attendee_id)
    # returns true if the event has the mentioned attendee
  end
end

कई संगठनों के साथ मॉडल और अन्यथा अधिक से अधिक कोड जमा करने और अप्रबंधनीय बनने की प्रवृत्ति है। चिंताएं त्वचा-नाइट वसा मॉड्यूल के लिए एक तरीका प्रदान करती हैं जिससे उन्हें अधिक मॉड्यूलरिज्ड और समझने में आसान बना दिया जाता है।

उपर्युक्त मॉडल को नीचे दी गई चिंताओं का उपयोग करके attendable.rb दी जा सकती है: ऐप / मॉडल / चिंताओं / घटना फ़ोल्डर में एक attendable.rb और commentable.rb फ़ाइल बनाएं

attendable.rb

module Attendable
  extend ActiveSupport::Concern

  included do 
    has_many :attenders
  end

  def has_attender(attender_id)
    # returns true if the event has the mentioned attendee
  end

  module ClassMethods
    def most_attended
      # returns the event with most number of attendes
    end
  end
end

commentable.rb

module Commentable
  extend ActiveSupport::Concern

  included do 
    has_many :comments
  end

  def find_first_comment
    # for the given article/event returns the first comment
  end

  def find_comments_with_word(word)
    # for the given event returns an array of comments which contain the given word
  end

  module ClassMethods
    def least_commented
      # finds the event which has the least number of comments
    end
  end
end

और अब कंसर्न का उपयोग करके, आपका इवेंट मॉडल कम हो जाता है

class Event < ActiveRecord::Base
  include Commentable
  include Attendable
end

* चिंताओं का उपयोग करते समय 'तकनीकी' समूहिंग के बजाय 'डोमेन' आधारित समूह के लिए जाने की सलाह दी जाती है। डोमेन आधारित समूह 'टिप्पणी योग्य', 'फोटोटेबल', 'उपस्थित' जैसी है। तकनीकी समूह का अर्थ 'सत्यापन विधि', 'FinderMethods' आदि होगा

Question

डिफ़ॉल्ट रेल 4 प्रोजेक्ट जनरेटर अब नियंत्रकों और मॉडलों के तहत निर्देशिका "चिंताओं" बनाता है। मुझे रूटिंग चिंताओं का उपयोग करने के बारे में कुछ स्पष्टीकरण मिले हैं, लेकिन नियंत्रकों या मॉडल के बारे में कुछ नहीं।

मुझे पूरा यकीन है कि इसे समुदाय में वर्तमान "डीसीआई प्रवृत्ति" के साथ करना है और इसे आज़मा देना चाहते हैं।

सवाल यह है कि, मुझे इस सुविधा का उपयोग कैसे करना चाहिए, क्या यह नाम बनाने के लिए नामकरण / वर्ग पदानुक्रम को परिभाषित करने के तरीके पर एक सम्मेलन है? मैं मॉडल या नियंत्रक में चिंता कैसे शामिल कर सकता हूं?




चिंताओं में फ़ाइल filename.rb बनाओ

उदाहरण के लिए, मैं अपने एप्लिकेशन में चाहता हूं जहां विशेषता create_by अद्यतन मौजूद है, वहां 1, और 0 अपडेट_बी के लिए मूल्य है

module TestConcern 
  extend ActiveSupport::Concern

  def checkattributes   
    if self.has_attribute?(:created_by)
      self.update_attributes(created_by: 1)
    end
    if self.has_attribute?(:updated_by)
      self.update_attributes(updated_by: 0)
    end
  end

end

इसके बाद आपके मॉडल में इस तरह शामिल है:

class Role < ActiveRecord::Base
  include TestConcern
end



इस पोस्ट ने मुझे चिंताओं को समझने में मदद की।

# app/models/trader.rb
class Trader
  include Shared::Schedule
end

# app/models/concerns/shared/schedule.rb
module Shared::Schedule
  extend ActiveSupport::Concern
  ...
end



Related