Eine Möglichkeit ist in einem module
gemeinsame Methoden zu setzen, wie dieses (RAILS_ROOT/lib/shared_methods.rb
)
module SharedMethods
def is_public?
# your code
end
end
Dann benötigen Sie zwei um diesen Modul in jedem Modell, das diese Methoden (dh app/models/your_model.rb
) haben sollte
class YourModel < ActiveRecord::Base
include SharedMethods
end
UPDATE:
In Rails 4 befindet sich ein new way dies zu tun. Sie sollten Code wie folgt in app/models/concerns
statt lib
von
Auch geteilt Ort, den Sie Klassenmethoden hinzufügen und Ausführen von Code über die Aufnahme wie diese
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
aber ich müsste eine Variable übergeben die sagen, Methode, welche Klasse ich verwende ... – NullVoxPopuli
self.class würde Ihnen geben, was auch immer die Klasse im Zusammenhang mit dieser Methode aufgerufen wird. Also, zum Beispiel, wenn Sie YourModel.new.is_public ?, wäre self.class YourModel. – lambdabutz