Соглашение Rails 6 для объявления пространств имен классов?автозагрузчик Zeitwerk - PullRequest
0 голосов
/ 20 июня 2019

Интересно, как должен выглядеть предпочтительный код пространства имен в rails 6, который использует zeitwerk * ​​1002 * для автозагрузки.

Ранее я использовал:

# app/controllers/api/users_controller.rb
module Api
  class UsersController
    def index
      render json: {}
    end
  end 
end

С Zeitwerk мы должнытеперь используйте:2-й стиль и есть небольшие различия в поведении:

module Foo
  class Bar
    def fud
    end
  end
end

module Foo
  class Woo
    def woo_woo
      Bar.new.fud
    end
  end
end
class Foo::Bar
  def fud
  end
end

class Foo::Woo
  def woo_woo
    # NameError: uninitialized constant Foo::Woo::Bar
    Bar.new.fud
    # no error
    Foo::Bar.new.fud
  end
end

1 Ответ

1 голос
/ 03 июля 2019

Я не думаю, что сама Zeitwerk заботится об этом в любом случае.В конце концов, controllers / api / users_controller.rb по-прежнему определяет Api::UsersController, и Zeitwerk может найти его в любом случае.

Как правило,

module Api
  class UsersController
  end 
end

является предпочтительным стилем, поэтому вы должны придерживаться этого.

См. https://github.com/fxn/zeitwerk/issues/57

...