Ich versuche ActiveRecord einige benutzerdefinierte Methoden hinzuzufügen. Ich möchte ein *_after
und *_before
Bereiche für jedes date
Feld eines Modells hinzufügen, damit ich etwas tun kann:Erweitern ActiveRecord :: Base
User.created_at_after(DateTime.now - 3.days).created_at_before(DateTime.now)
Ich habe die Lösung gefolgt hier Rails extending ActiveRecord::Base erklärt, aber wenn ich führen die Schienen Konsole und versuchen, Rufen Sie die Methoden Ich bekomme einen undefined method
Fehler.
Hier ist mein Code:
# 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
Was mache ich falsch?
Haben Sie etwas dagegen, den Stack-Trace zu buchen? Sowie das Ergebnis von 'ActiveRecordDateExtension.instance_methods'? –
@ JeremyRodi Die Schienenkonsole läuft normal. Ich erhalte einen 'undefined method' Fehler, wenn ich zu nennen versuchen, zum Beispiel' User.created_at_before (DateTime.now) ' NoMethodError: nicht definierte Methode 'created_at_before' für # .... Hier ist die Ausgabe für 'instance_methods' und' methods'. Bedenken Sie jedoch, dass ich Klassenmethoden definieren möchte. 'ActiveRecordDateExtension.instance_methods => []' 'ActiveRecordDateExtension.methods (false) => []' –