Нет, вы не можете сказать Rails искать квалифицированную постоянная (как MyApp::User
) на верхнем уровне каталога на пути автозагрузки как (app/models
). Когда Rails видит MyApp::User
(в коде, который не входит в определение модуля), он будет искать только my_app/user.rb
в каталогах в пути автозагрузки.
Вы можете много раз обманывать Rails, никогда не используя квалифицированные константы. Если ваши контроллеры находятся в том же пространстве имен, следующий будет работать:
приложение/контроллеры/my_app/users_controller.rb
module MyApp
class UsersController < ApplicationController
def index
@users = User.all
end
end
end
приложение/модели/user.rb
module MyApp
class User < ActiveRecord::Base
end
end
Rails Безразлично Не знаю, относится ли User
к контроллеру на верхнем уровне или в MyApp
, поэтому он будет искать как app/models/user.rb
, так и app/models/my_app/user.rb
. Точно так же вы можете автозагружать модели с расширением имен в app/models
из других моделей с именами.
Однако вы попали бы на стену (то есть, вам придется вручную потребовать файл класса модели), как только вам понадобится обратиться к модели с именами из кода, который сам не был в пространстве имен, например. в консоли или в модульном тесте. И было бы глупо иметь контроллеры в подкаталоге, но модели не в подкаталоге. И вы будете путать всех, кто посмотрел ваш код. Поэтому лучше всего будет следовать правилам Rails и поместить ваши модели с именами в подкаталог app/models
.
Hi. Я уверен, что вы это знаете. Но, похоже, вы сражаетесь с соглашениями Rails на этом. Интересно, не лучше ли вам следовать правилам. Не ответ на ваш вопрос (извините за это), просто мысль. – jvillian
Да, я знаю это, и было бы концом Мира, если мне придется использовать дополнительную папку, но я хотел бы знать, есть ли простой способ держать вещи чище. Спасибо – macsig