variable una tipos sirven simbolos que para modulos mapas los importar diccionarios constantes clases clase ruby-on-rails separation-of-concerns

ruby-on-rails - tipos - que es una clase en ruby



Rieles: Incluyendo una preocupaciĆ³n con una constante dentro de una preocupaciĆ³n (1)

Me preocupa que almacene constantes:

module Group::Constants extend ActiveSupport::Concern MEMBERSHIP_STATUSES = %w(accepted invited requested rejected_by_group rejected_group) end

Y otra preocupación que deseo usar estas constantes:

module User::Groupable extend ActiveSupport::Concern include Group::Constants MEMBERSHIP_STATUSES.each do |status_name| define_method "#{status_name}_groups" do groups.where(:user_memberships => {:status => status_name}) end end end

Desafortunadamente, esto resulta en un error de enrutamiento:

uninitialized constant User::Groupable::MEMBERSHIP_STATUSES

Parece que la primera preocupación no se carga correctamente en la segunda preocupación. Si ese es el caso, ¿qué puedo hacer al respecto?


Parece que este comportamiento es por diseño, como se explica muy bien here .

Lo que tendrá que hacer en este caso es que no se extiendan las Group::Constants de ActiveSupport::Concern ya que esto impedirá que su implementación se comparta con otros módulos de extensión de ActiveSupport::Concern (aunque finalmente se compartirá en una clase que incluye el segundo módulo):

module A TEST_A = ''foo'' end module B extend ActiveSupport::Concern TEST_B = ''bar'' end module C extend ActiveSupport::Concern include A include B end C::TEST_A => ''foo'' C::TEST_B => uninitialized constant C::TEST_B class D include C end D::TEST_A => ''foo'' D::TEST_B => ''bar''

En resumen, deberá hacer que el Group::Constants un módulo estándar y, a continuación, todo estará bien.