在子文件夹中组织rails中的模型/控制器和类

时间:2013-08-02 11:21:33

标签: ruby-on-rails

我正在一个Rails项目中工作,我在其中使用了以下名称的模型/控制器和类文件

/app/models/friends/friend.rb
/app/controllers/friends/friends_controller.rb
/lib/classes/friends/friend.rb

我尝试在application.rb中的autoload路径中添加所有模型,控制器和类文件。 但由于班级名称相同,我面临着问题。

我应该如何处理?并以文件以名称空间组织的方式组织文件。

谢谢, 巴兰

2 个答案:

答案 0 :(得分:1)

更好的方法是使用Rails Engines&将你的应用程序划分为独立的模块。

rails plugin new friends --full --mountable --dummy-path spec/dummy

上面的命令将生成一个带有隔离命名空间的完全可安装引擎,这意味着该引擎中的所有控制器和模型都将在引擎的命名空间内隔离。例如,稍后Post模型将被称为Friends::Post,而不仅仅是Post。要将此应用程序安装在主rails应用程序中,您需要做两件事:

向Gemfile添加条目

gem 'friends', path: "/path/to/friends/engine"

然后添加路由到config / routes.rb

mount Friends::Engine, at: "/friends"

有关此approch的更多信息,请结帐:

答案 1 :(得分:0)

类名相同但路径不同,除了/lib/classes/friends/friend.rb

之外,您不需要向自动加载添加类

您是否尝试过以下方式:

# app/models/friends/friend.rb
class Friends::Friends
  #...
end
# Friends::Friends.new

# app/controllers/friends/friends_controller.rb
class Friends::FriendsController < ApplicationController
  #...
end

# lib/classes/friends/friend.rb
module Classes
  module Friends
    class Friends
      #...
    end
  end
end
# Classes::Friends::Friends.new

要将lib文件添加到自动加载,请在applicaion.rb

后添加以下内容
config.autoload_paths += %W(#{config.root}/lib)