Ruby on rails 产生“最佳实践”的方法是什么;“widgetized”;Rails中的内容

Ruby on rails 产生“最佳实践”的方法是什么;“widgetized”;Rails中的内容,ruby-on-rails,model-view-controller,zend-framework,widget,Ruby On Rails,Model View Controller,Zend Framework,Widget,在我以前使用Zend Framework构建的项目中,我广泛使用Zend_view的“Action view”助手。它基本上允许从视图脚本启动一个单独的请求->调度ti操作->视图渲染循环 以下是指向的相应页面的链接(搜索“Action View Helper”) 这个助手是处理widgetized内容的一种非常方便的方法,例如在具有门户布局的页面上,您可以在页面中填充不同的小部件(如广告块、货币信息等) 尽管这种方法会对页面的响应时间产生负面影响,因为它涉及大量额外的路由/调度活动,但它允许将

在我以前使用Zend Framework构建的项目中,我广泛使用Zend_view的“Action view”助手。它基本上允许从视图脚本启动一个单独的请求->调度ti操作->视图渲染循环

以下是指向的相应页面的链接(搜索“Action View Helper”)

这个助手是处理widgetized内容的一种非常方便的方法,例如在具有门户布局的页面上,您可以在页面中填充不同的小部件(如广告块、货币信息等)

尽管这种方法会对页面的响应时间产生负面影响,因为它涉及大量额外的路由/调度活动,但它允许将小部件代码和视图脚本组织到一个合理的结构中。一个小部件只是一个控制器操作,带有链接的视图脚本

不幸的是,我在Rails中没有找到任何类似的视图帮助程序。 在Rails中,有什么方法可以优雅地解决此任务吗?

在Rails中,的方法将哈希作为参数并输出一个简单字符串。您可以在视图中这样使用:

<%= render :partial => "shared/widgets/_#{widget.widgettype.name}", :collection => @current_user.widgets %>
“共享/widgets/{widget.widgettype.name}”,集合=>@current\u user.widgets%>
在这种情况下,Rails将遍历@current_user.widgets,在“app/views/shared/widgets/_widgettypename.html.erb”中找到一个小部件部分,并为每个附加的小部件调用该部分


有关Rails部分的进一步阅读,请参阅文档。

我自己似乎找到了问题的答案。它是“rails插件”。还有一种显然支持Rails3的方法。

食谱告诉了我要避免的实际方法。问题是小部件通常需要在模型和控制器部分完成一些工作,然后才能传递给视图。使用这种方法,我需要准备控制器中的所有数据,其视图将调用小部件部分。当然,小部件逻辑可以放在单独的类/助手中。但是我需要在两个不同的位置将实际页面与一组特定的小部件链接起来——在正在呈现页面的控制器中(到准备好的小部件数据)和在控制器的视图脚本中(实际呈现调用)。我不喜欢在两个地方激活程序的一些代码以使其正常运行,因为这是“丑陋的”。正如我在问题中所指出的,Zend Framework通过运行一个单独的请求->调度->控制器操作->渲染周期,非常优雅地解决了这一任务,结果(html)只是放在视图脚本中的一个位置。因此,任何小部件都只是一个带有关联视图脚本的简单控制器操作。但是我不知道如何在Rails中实现它。RadiantTCMS扩展有一个类似于您在Zend中描述的功能。基本上,每个扩展都像自己的小应用程序。你可能想深入了解他们的源代码,看看它是如何工作的。无法在一个答案中发布两个链接-垃圾邮件预防机制阻止了我这样做。这里是到fork的链接-您可能也对它感兴趣。我已经玩过了,它对于更复杂的东西来说非常好。在方便的同时,一定要小心使用再次启动整个调度周期的解决方案。这个模型在我使用CakePHP时也是很常见的,CakePHP文档和render_组件文档都会评论这个模型有多慢,特别是如果您经常这样做的话。