Modellerimden birkaçı bir gizlilik sütununa sahipse, tüm modeller tarafından paylaşılan bir yöntemi yazabilmem için bir yol var mı?Ruby On Rails: Modeller arasında paylaşılan yöntem
Bu yüzden, object_var.is_public yapabilmek ister misiniz?
Modellerimden birkaçı bir gizlilik sütununa sahipse, tüm modeller tarafından paylaşılan bir yöntemi yazabilmem için bir yol var mı?Ruby On Rails: Modeller arasında paylaşılan yöntem
Bu yüzden, object_var.is_public yapabilmek ister misiniz?
olası bir yolu Sonra (yani app/models/your_model.rb
) Bu yöntemler
class YourModel < ActiveRecord::Base
include SharedMethods
end
olmalıdır her modelde bu modülü içeren iki ihtiyaç bu (
RAILS_ROOT/lib/shared_methods.rb
)
module SharedMethods
def is_public?
# your code
end
end
gibi module
paylaşılan yöntemleri koymaktır
GÜNCELLEME: Raylar 4'te
bir 012 var Bunu yapmak için. Sen, ortak bir atadan modelleri devralan tarafından size de yapabilirsiniz bu
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
gibi içerme kod sınıf yöntemleri ekleyip yürütebileceği app/models/concerns
yerine Ayrıca
lib
arasında böyle kod paylaşımlı yerleştirebilirsiniz hangi Paylaşılan yöntemleri içerir. Uygulamada
class BaseModel < ActiveRecord::Base
def is_public?
# blah blah
end
end
class ChildModel < BaseModel
end
, jigfox yaklaşımı genellikle daha iyi çalışır, böylece cepten teorisi :)
Bunu bu şekilde yapmak istiyorum. Ama yapamam ki ... :( –
için sadece sevgiden miras kullanmayı zorunda hissetmeyin yok ama söyleyen bir değişken geçirmek gerekir Metodu kullanıyorum hangi yöntem sınıfın bağlamında olursa olsun ... – NullVoxPopuli
self.class size verir. Yani, örneğin, YourModel.new.is_public'i yaptıysanız, self.class YourModel olur. – lambdabutz