是否可以在Rails项目中更改文件夹结构?

Rom*_*man 4 api rest ruby-on-rails ruby-on-rails-3

我来自.Net MVC背景,希望在RoR中完成一个项目.具体来说,我正在开发一个REST API.

我将描述我的想法,希望你能引导我朝着正确的方向前进.我的api必须支持版本,而最强大的api版本方法是复制每个版本的代码.这样在一个版本中修复问题不会影响其他版本.在.NET MVC中执行此操作时,区域是您最好的朋友,因为每个版本的源文件可以通过使用区域进行细分.

所以我的问题是:在RoR中可以更改目录结构,以便进行此层次结构

app/
  controllers
    /v1
      c1_controller.rb
      c2_controller.rb
    /v2
      c1_controller.rb
      c2_controller.rb
  models/
    /v1
      m1.rb
      m2.rb
    /v2
      m1.rb
      m2.rb
  views/
    /v1
      view1.html.erb
      view2.html.erb
    /v3
      view1.html.erb
      view2.html.erb
Run Code Online (Sandbox Code Playgroud)

可以重新安排到这个?

app/
  v1/
    controllers/
      c1_controller.rb
      c2_controller.rb
    models/
      m1.rb
      m2.rb
    views/
      view1.html.erb
      view2.html.erb
  v2/
    controllers/
      c1_controller.rb
      c2_controller.rb
    models/
      m1.rb
      m2.rb
    views/
      view1.html.erb
      view2.html.erb
Run Code Online (Sandbox Code Playgroud)

for*_*ker 10

查看此页面,它将为您提供有关Rails 3+项目的目录结构的一些见解:

http://edgeapi.rubyonrails.org/classes/Rails/Engine.html

从Rails 3.0开始,应用程序和引擎具有更灵活的路径配置(与之前的硬编码路径配置相反).这意味着您不需要将控制器放置在应用程序/控制器上,而是放在您认为方便的任何地方.

不要害怕它是关于Engines的事实,它在一开始就说明:每个Rails应用程序都是一个引擎.

UPDATE:从未有机会做我自己,但根据该网页,这个,你应该添加下列的东西进入你的config/application.rbclass Application < Rails::Application:

config.paths["app/controllers"] << "app/v1/controllers"
config.paths["app/controllers"] << "app/v2/controllers"
config.paths["app/controllers"] << "app/v3/controllers"

config.paths["app/models"] << "app/v1/models"
config.paths["app/models"] << "app/v2/models"
config.paths["app/models"] << "app/v3/models"

config.paths["app/views"] << "app/v1/views"
config.paths["app/views"] << "app/v2/views"
config.paths["app/views"] << "app/v3/views"
Run Code Online (Sandbox Code Playgroud)

以此项目为例:https://github.com/forker/multiversion