मैं ActiveRecord में कुछ कस्टम विधियों को जोड़ने का प्रयास कर रहा हूं। मैं एक मॉडल के हर date
क्षेत्र के लिए एक *_after
और *_before
स्कोप जोड़ना चाहते हैं तो मैं कुछ इस तरह कर सकते हैं:विस्तारित ActiveRecord :: बेस
User.created_at_after(DateTime.now - 3.days).created_at_before(DateTime.now)
मैं यहाँ समाधान समझाया Rails extending ActiveRecord::Base का पालन किया है लेकिन जब मैं रेल सांत्वना निष्पादित और करने की कोशिश उन तरीकों को कॉल करें जिन्हें मुझे undefined method
त्रुटि मिलती है।
# config/initializers/active_record_date_extension.rb
require "active_record_date_extension"
# lib/active_record_date_extension.rb
module ActiveRecordDateExtension
extend ActiveSupport::Concern
included do |base|
base.columns_hash.each do |column_name,column|
if ["datetime","date"].include? column.type
base.define_method("#{column_name}_after") do |date|
where("#{column_name} > ?", date)
end
base.define_method("#{column_name}_before") do |date|
where("#{column_name} < ?", date)
end
end
end
end
end
Rails.application.eager_load!
ActiveRecord::Base.descendants.each do |model|
model.send(:include, ActiveRecordDateExtension)
end
क्या मैं गलत कर रहा हूँ:
यहाँ मेरी कोड है?
क्या आपको स्टैक ट्रेस पोस्ट करना दिमाग है? साथ ही 'ActiveRecordDateExtension.instance_methods' के परिणाम भी? –
@ जेरेमीरोडी रेल कंसोल सामान्य रूप से चलता है। अपरिभाषित विधि 'created_at_before' # के लिए <वर्ग:: 0x007fb500970b00> यहाँ .... मैं एक 'अपरिभाषित method' त्रुटि जब मैं फोन करने की कोशिश उदाहरण के लिए,' User.created_at_before (DateTime.now) ' NoMethodError मिलता है, 'instance_methods' और 'विधियों' के लिए आउटपुट है। लेकिन ध्यान रखें कि मैं कक्षा विधियों को परिभाषित करने की कोशिश कर रहा हूं। 'ActiveRecordDateExtension.instance_methods => []' 'ActiveRecordDateExtension.methods (false) => []' –