Ответ 1
Нет, это не плохая идея. Многие люди это делают, и я не мог жить без него в больших приложениях.
Есть два способа сделать это:
Во-первых, просто двигайте свои модели. Вы, однако, должны будете сказать Rails, чтобы загрузить своенравные модели (так как они не будут знать, где они). Что-то вроде этого должно сделать трюк:
# In config/application.rb
module YourApp
class Application < Rails::Application
# Other config options
config.autoload_paths << Dir["#{Rails.root}/app/models/*"]
end
end
Первый способ прост, но на самом деле это не самый лучший способ. Второй способ включает в себя namespacing ваши модели с группами, в которых они находятся. Это означает, что вместо User
и UserGroup
и UserPermissions
у вас есть User
, User::Group
и User::Permission
.
Чтобы использовать это, создайте такую модель: rails generate model User::Group
. Rails автоматически создаст для вас все папки. Дополнительным преимуществом является то, что при таком подходе вам не нужно будет указывать полное имя модели для ассоциаций в пространстве имен:
class User < ActiveRecord::Base
belongs_to :group # Rails will detect User::Group as it in the same namespace
end
class User::Group < ActiveRecord::Base
has_many :users
end
Вы можете указать количество уровней пространства имен, сколько хотите, поэтому User::Group::Permission
будет возможно.