class_methods
viene utilizzato per aggiungere metodi di classe per il modello utilizzato dalla preoccupazione.
Un tipico modulo simile a questa:
module M
def self.included(base)
base.extend ClassMethods
end
module ClassMethods
...
end
end
Utilizzando ActiveSupport::Concern
il modulo di cui sopra potrebbe invece essere scritta come:
require 'active_support/concern'
module M
extend ActiveSupport::Concern
class_methods do
...
end
end
Come Oleg Antonyan pointed out, dal codice sorgente, sappiamo che sta andando utilizzare il modulo ClassMethods
sotto il cofano.
Riferimento: http://api.rubyonrails.org/classes/ActiveSupport/Concern.html
fonte
2017-02-02 13:36:15
Non credo 'modulo ClassMethods' è "ruby pura" esattamente se - nulla nel linguaggio Ruby farà automaticamente qualcosa di speciale con un sotto-modulo chiamato' ClassMethods', anche questo proviene da 'ActiveSupport :: Concern'. – jrochkind
Sì, Ruby non farà nulla con ClassMethods da solo, ma non proviene da ActiveSupport. Forse per ragioni storiche le persone usano questo nome di modulo, non lo so. Ma è ancora puro Ruby. Puoi nominare questo modulo come vuoi http://yehudakatz.com/2009/11/12/better-ruby-idioms/ –
Ti stai sbagliando, ActiveSupport :: Concern farà davvero qualcosa di speciale con un sottomodulo specificamente chiamato ' ClassMethods', fa esattamente quello che ti aspetti. https://github.com/rails/rails/blob/d06e42518a4fdd1732f1d75a43c69071bcd79245/activesupport/lib/active_support/concern.rb#L119 e https://github.com/rails/rails/blob/d06e42518a4fdd1732f1d75a43c69071bcd79245/activesupport/lib/active_support/ concern.rb # L135-L137 – jrochkind