0

如何将 Ramaze 中的代码库拆分为不同的控制器类,最“类似 ruby​​”的方式是什么?

我在 Ramaze 有一个基本项目,我想将其拆分为多个文件。现在,我对所有事情都使用一个控制器类,并通过开放类添加到它上面。理想情况下,控制器的每个不同部分都属于自己的类,但我不知道如何在 Ramaze 中做到这一点。

我希望能够添加更多功能和更多单独的控制器类,而无需添加太多样板代码。这就是我现在正在做的事情:

初始化.rb

require './othercontroller.rb'

class MyController < Ramaze::Controller
  map '/'
  engine :Erubis

  def index
    @message = "hi"
  end
end
Ramaze.start :port => 8000

其他控制器.rb

class MyController < Ramaze::Controller
  def hello
    @message = "hello"
  end
end

任何有关如何拆分此逻辑的建议将不胜感激。

4

1 回答 1

0

通常的方法是要求你的控制器init.rb,并在它自己的文件中定义每个类,并像这样在 init 中要求它:

控制器/init.rb:

# Load all other controllers
require __DIR__('my_controller')
require __DIR__('my_other_controller')

控制器/my_controller.rb :

class MyController < Ramaze::Controller
  engine :Erubis

  def index
    @message = "hi"
  end

  # this will be fetched via /mycontroller/hello
  def hello
    @message = "hello from MyController"
  end
end

控制器/my_other_controller.rb :

class MyOtherController < Ramaze::Controller
  engine :Erubis

  def index
    @message = "hi"
  end

  # this will be fetched via /myothercontroller/hello
  def hello
    @message = "hello from MyOtherController"
  end
end

您可以创建一个继承自的基类,这样您就不必engine :Erubis在每个类中重复行(可能还有其他行)。

如果您想MyController在 '/' URI 上提供服务,可以将其映射到 '/' :

class MyController < Ramaze::Controller
  # map to '/' so we can call '/hello'
  map '/'
  ...

您可以查看博客示例以获取示例:https ://github.com/Ramaze/ramaze/tree/master/examples/app/blog

于 2015-01-14T13:01:33.893 回答