我们的应用程序是使用Rails 2.3.5和ActiveScaffold一起开发的。通过在控制器中声明如下所示,ActiveScaffold在运行时增加了相当大的魔力:
class SomeController < ApplicationController
active_scaffold :model
end只要在控制器中添加一行,所有restful操作及其相应的视图就会由于ActiveScaffold的元编程而可用。由于大多数代码都是在运行时添加的,因此在开发模式下请求似乎要慢一点,因为没有class_caching。
我们需要添加一个授权层,我的团队已经选择了锁定插件,它解析了一个init.rb文件,您可以在其中声明所有授权规则。锁定存储授权规则的方式是解析init.rb文件并计算init.rb文件中声明的控制器。因此,对于每个请求锁定,评估所有控制器,从而迫使ActiveScaffold添加大量元编程,这反过来使db查询来查找每个模型的列定义。这在很大程度上减缓了开发中的请求,因为没有class_caching。有些时候要求的时间是30到45秒。
有没有办法强迫ActiveScaffold在before_filter中发挥它的魔力?如下所示:
class SomeController < ApplicationController
before_filter :init_active_scaffold
private
def init_active_scaffold
self.class_eval do
active_scaffold :model
end
end
endclass SomeController < ApplicationController
before_filter :init_active_scaffold
private
def init_active_scaffold
self.instance_eval do
active_scaffold :model
end
end
endclass SomeController < ApplicationController
before_filter :init_active_scaffold
private
def init_active_scaffold
self.class.class_eval do
active_scaffold :model
end
end
endclass SomeController < ApplicationController
before_filter :init_active_scaffold
private
def init_active_scaffold
self.class.instance_eval do
active_scaffold :model
end
end
end我尝试了上述四个选项,当我提出请求时,浏览器似乎显示了加载指示符,但没有发生任何事情。
任何帮助都是非常感谢的。提前谢谢。
发布于 2010-01-01 21:17:35
仅在开发模式下对init.rb进行锁定,这样您就可以在不重新启动应用程序的情况下进行更改。它会慢一些--这是一种方便的权衡。好消息是,锁定将只在生产模式下执行一次此解析。
我不使用ActiveScaffold,所以我不能在那里提供任何帮助,但我认为您会对此感兴趣。
https://stackoverflow.com/questions/1953705
复制相似问题