Ruby sinatra的控制器是什么?
有人问我为什么“我在视图中创建复杂的Ruby变量。 我的控制器不应该声明这些变量吗?”Ruby sinatra的控制器是什么?,ruby,sinatra,Ruby,Sinatra,有人问我为什么“我在视图中创建复杂的Ruby变量。 我的控制器不应该声明这些变量吗?” 我的sinatra控制器是我的.rb文件吗?我有一个.rb文件和视图。Sinatra开箱即用没有标准的MVC框架。因此,虽然您不想将所有内容都保留在主视图文件中,但从技术上讲,您也没有一个“控制器”来将其放在主视图文件中。将应用程序拆分为不同的功能可能是保持其简单性的最佳方法。将大面积的功能提取到单独的类中,将小部分提取到助手库中 看看其他人是如何做到这一点的,这篇文章应该有一些好的例子供你学习: 如果一个M
我的sinatra控制器是我的.rb文件吗?我有一个.rb文件和视图。Sinatra开箱即用没有标准的MVC框架。因此,虽然您不想将所有内容都保留在主视图文件中,但从技术上讲,您也没有一个“控制器”来将其放在主视图文件中。将应用程序拆分为不同的功能可能是保持其简单性的最佳方法。将大面积的功能提取到单独的类中,将小部分提取到助手库中 看看其他人是如何做到这一点的,这篇文章应该有一些好的例子供你学习: 如果一个MVC框架成为了您真正需要的东西,那么看看Padrino() 稍微相关的职位:
在典型的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
然后在foo.haml
中:
:javascript
var data=#{@data.to_json};
您可以在主.rb文件的顶部设置控制器(在1.9.2中)
Dir.glob("controllers/*.rb").each { |r| require_relative r }
这将需要在名为controllers/
从那里,您可以像以前在main.rb文件中那样实现正常路由。请在Github上查看
编辑:Rstat.us已转到rails3,虽然仍有帮助,但您可能必须返回主分支上的多次提交,以了解其使用情况。@CaleyWoods:感谢您对Rstat.us的引用 对于正在寻找Sinatra版本的用户,以下是Sinatra提交的链接:
(因此,您不必浏览提交历史;-)如果您有从ApplicationController继承的控制器,这只是为了以后的继承。祝你好运 如果您的应用程序使用config.ru文件,那么这可能会有所帮助
require 'active_support'
require 'sinatra/base'
APP_ROOT = Pathname.new(File.expand_path('../', __FILE__))
# We have to do this in case we have controllers that inherit from each other.
Dir[APP_ROOT.join('app', 'controllers', '*.rb')].each do |controller_file|
filename = File.basename(controller_file).gsub('.rb', '')
autoload ActiveSupport::Inflector.camelize(filename), controller_file
end
这假设您将代码放入config.ru,但也可以放入应用程序文件,并确保调整目录结构。帮助程序是用于帮助查看的类。为什么我必须使用
@data
而不是data
?@Radek,因为SinatraHaml
helper为Haml模板提供了实例变量,但本地变量不是。这一评论值得更多的关注。非常有用。谢谢L#79显示了Dir.glob语句,该语句允许您使用控制器/文件夹。