Jednym z możliwych sposobów jest wprowadzenie wspólnych metod w module
tak (RAILS_ROOT/lib/shared_methods.rb
)
module SharedMethods
def is_public?
# your code
end
end
to trzeba dwa to ten moduł w każdym modelu, który powinien mieć to metody (tj app/models/your_model.rb
)
class YourModel < ActiveRecord::Base
include SharedMethods
end
UPDATE:
W szyn 4 jest new way, aby to zrobić. należy umieścić wspólny kod jak to w app/models/concerns
zamiast lib
Ponadto można dodać metod klasy i wykonanie kodu na włączenie się ten
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
ale muszę przekazać zmienną mówi metoda, z której klasy korzystam ... – NullVoxPopuli
self.class da ci wszystko, co klasa jest w kontekście wywoływania tej metody. Na przykład, jeśli zrobiłeś YourModel.new.is_public ?, self.class będzie YourModel. – lambdabutz