我有一个小部件基类和 50 种不同的子小部件子类。每个子小部件都提供自己的局部视图。Page 对象使用 2 到 3 个这些小部件的配置定义,并调用 view__generator 方法,该方法通过检索和合成与每个小部件关联的部分视图来为该特定页面创建单个视图 erb 文件。
例如,关于海豚的页面可能包括一个图像小部件和一个单选按钮选择小部件。生成器函数创建一个单一的视图页面。(是的,我知道听起来我应该只使用内置的 rails 和 html 结构,但是有一种方法可以解决这个问题)。
我的问题是我无法弄清楚如何将数据需求组合成一组代码,这些代码可以在呈现组合视图之前由控制器运行。
例如,小部件 A 可能需要查询 Foo.all,而小部件 B 可能需要计算名为“total_sum”的表单变量。
我考虑了两种方法:1)弄清楚如何获取特定于小部件的代码块并在基本页面控制器的上下文中执行它们。
我尝试使用 Procs,但 Proc 变量在 Proc 范围之外不可用。我知道我可以将代码写入部分视图,但我真的宁愿避免混淆关注点。
2)对小部件模型进行数据查询和计算,并将数据作为散列传回,然后可以将其绑定到基类中的实例变量并提供给复合视图。
我很确定 2 是首选方向,但我会对最佳实践的指导感兴趣。