के बीच साझा विधि यदि मेरे कुछ मॉडल में गोपनीयता कॉलम है, तो क्या मैं एक मॉडल को सभी मॉडलों द्वारा साझा की गई एक विधि लिख सकता हूं, इसे कॉल करें is_public?रेल पर रूबी: मॉडल
तो, मैं object_var.is_public करने में सक्षम होना चाहता हूं?
के बीच साझा विधि यदि मेरे कुछ मॉडल में गोपनीयता कॉलम है, तो क्या मैं एक मॉडल को सभी मॉडलों द्वारा साझा की गई एक विधि लिख सकता हूं, इसे कॉल करें is_public?रेल पर रूबी: मॉडल
तो, मैं object_var.is_public करने में सक्षम होना चाहता हूं?
एक संभव तरीका एक module
इस (RAILS_ROOT/lib/shared_methods.rb
)
module SharedMethods
def is_public?
# your code
end
end
तो फिर तुम दो की जरूरत है हर मॉडल में इस मॉड्यूल यह तरीकों (यानी app/models/your_model.rb
)
class YourModel < ActiveRecord::Base
include SharedMethods
end
होना चाहिए कि शामिल की तरह में साझा तरीकों डाल करने के लिए है
अद्यतन:
रेल 4 में एक 012 है ऐसा करने के लिए। आप में app/models/concerns
lib
के बजाय
इसके अलावा आप इस
module SharedMethods
extend ActiveSupport::Concern
included do
scope :public, -> { where(…) }
end
def is_public?
# your code
end
module ClassMethods
def find_all_public
where #some condition
end
end
end
की तरह शामिल किए जाने पर वर्ग विधियां जोड़ें और कोड निष्पादित कर सकते हैं आप भी ऐसा कर सकते हैं इस तरह साझा रखूं कोड एक पूर्वज से मॉडल इनहेरिट द्वारा जो साझा विधियों को शामिल करता है।
class BaseModel < ActiveRecord::Base
def is_public?
# blah blah
end
end
class ChildModel < BaseModel
end
अभ्यास में, jigfox के दृष्टिकोण अक्सर बेहतर बाहर काम करता है, इसलिए OOP सिद्धांत :)
मैं इसे इस तरह से करना चाहता हूं। लेकिन मैं इसे काम नहीं कर सकता ... :( –
के लिए केवल प्यार की वजह से भाग का उपयोग करने के दबाव में न आएँ, लेकिन मैं एक चर कह पारित करने के लिए की आवश्यकता होगी विधि मैं किस वर्ग का उपयोग कर रहा हूं ... – NullVoxPopuli
self.class आपको उस विधि के संदर्भ में कक्षा जो कुछ भी कहता है उसे देगा। तो, उदाहरण के लिए, यदि आपने YourModel.new.is_public किया है, तो self.class आपका मॉडल होगा। – lambdabutz