我正在构建一个允许用户安装应用以添加特定功能的框架。目的是让用户通过一个小型Web应用程序管理这些应用程序。已安装的应用程序列表存在于sqlite3数据库中,我使用Sinatra来路由http请求。我使用erb模板来设计相关的网页。
我的问题是,填充我显示的已安装应用列表的最佳做法是什么?我应该在Sinatra' do'中进行SQL查询。阻止然后将包含应用程序名称的数组传递给erb?或者我应该在erb文件中进行数据库查询吗?
从功能上讲,我确定它们非常相似(尽管如果存在功能差异,我想知道),但我希望尽可能遵循最佳实践:)
答案 0 :(得分:1)
最佳做法包括在do
块中执行SQL查询,并将对象传递给模板。
在模板中编写太多代码被认为是一个坏主意,如果您想要使用来自不同路径的相同模板,将提取逻辑与显示逻辑隔离可能很有用。
通过使用Ruby的鸭子打字,您可以使模板非常灵活。比如Haml:
%ul
- @dataset.each do |row|
%li= row['name']
您需要做的就是为模板提供Enumerable
个对象,这些对象都响应[]
。它可能是数据库查询的结果(我认为大多数宝石返回兼容的东西),或者它可以是例如Array
的硬编码Hash
。