Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby sinatra的控制器是什么?_Ruby_Sinatra - Fatal编程技术网

Ruby sinatra的控制器是什么?

Ruby sinatra的控制器是什么?,ruby,sinatra,Ruby,Sinatra,有人问我为什么“我在视图中创建复杂的Ruby变量。 我的控制器不应该声明这些变量吗?” 我的sinatra控制器是我的.rb文件吗?我有一个.rb文件和视图。Sinatra开箱即用没有标准的MVC框架。因此,虽然您不想将所有内容都保留在主视图文件中,但从技术上讲,您也没有一个“控制器”来将其放在主视图文件中。将应用程序拆分为不同的功能可能是保持其简单性的最佳方法。将大面积的功能提取到单独的类中,将小部分提取到助手库中 看看其他人是如何做到这一点的,这篇文章应该有一些好的例子供你学习: 如果一个M

有人问我为什么“我在视图中创建复杂的Ruby变量。 我的控制器不应该声明这些变量吗?”


我的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,因为Sinatra
Haml
helper为Haml模板提供了实例变量,但本地变量不是。这一评论值得更多的关注。非常有用。谢谢L#79显示了Dir.glob语句,该语句允许您使用控制器/文件夹。