什么是sinatra的控制器?

Rad*_*dek 10 ruby sinatra

我被问到为什么"我在我的视图中创建了复杂的Ruby变量.我的控制器不应该声明这些变量吗?"

我的sinatra控制器是我的.rb文件吗?我有一个.rb文件和视图视图.

Cal*_*ods 17

您可以通过在主.rb文件的顶部执行(在1.9.2中)来设置控制器的概念

Dir.glob("controllers/*.rb").each { |r| require_relative r }
Run Code Online (Sandbox Code Playgroud)

这将在一个名为controllers /的文件夹中的require_relative每个.rb文件

从那里你可以像以前在主.rb文件中那样实现正常路由.请看看Github 上的rstat.us.

编辑:Rstat.us已经走了rails3虽然仍然有用,你可能需要回到主分支上的许多提交,以找到它是如何使用的.


Tyl*_*ler 6

开箱即用的Sinatra没有标准的MVC框架.因此,虽然您不希望将所有内容保留在主视图文件中,但您在技术上也没有"控制器"来将其放入.将应用程序拆分为不同的功能可能是保持简单的最佳方法.将大部分功能分解为单独的类和小东西到辅助库中.

看看其他人如何做到这一点可能有所帮助,这篇文章应该有一些很好的例子供你研究:https://stackoverflow.com/questions/2075758/real-life-examples-of-sinatra-applications

如果MVC框架成为您真正认为需要的东西,请查看Padrino(http://padrinorb.com)

稍有相关的帖子:

https://softwareengineering.stackexchange.com/questions/14293/ruby-sinatra-best-practices-for-project-structure


Phr*_*ogz 6

在典型的MVC设置中,每个Sinatra路由都可以被视为自己的控制器.对于你的例子:

require 'sinatra'
require 'json'
get "/foo" do
  # This might take many lines of excellent code to form your data
  @data = some_complex_array_hash_combo
  haml :foo
end
Run Code Online (Sandbox Code Playgroud)

然后在foo.haml:

:javascript
  var data = #{@data.to_json};
Run Code Online (Sandbox Code Playgroud)

  • @Radek因为Sinatra`haml`帮助器可以将实例变量提供给Haml模板,但是局部变量不是. (2认同)