1

我觉得控制器-> 视图交互错过了一些东西,所以这是我的问题。

我有一个控制器动作正在生成一堆数据:

@第一第二第三

每个变量在视图中显示为一个 html 块(部分)。

有时其中一个或多个将是空的,我仍然想显示其他的。

我解决这个问题的解决方案是在控制器中将变量设置为字符串(“无数据”),因为通常数据是某种数组,我在视图中测试字符串以检查是否有真实数据和作出相应的回应。

最重要的是,我还有一些用例,我的数据不会总是以相同的部分显示。我知道在调用正确的部分之前我可以在几个条件下做到这一点。

我想到的这类问题的一个很好的例子是仪表板,其中某些项目有时会丢失或根据显示的数据而变化。

我已经在使这些用例正常工作,但是通过在视图中放置很多逻辑,我感觉我没有正确地执行 MVC。是否有更好的设计模式(特定于或不特定于rails)来解决这种情况?

4

3 回答 3

0

我认为您的方法没有任何严重问题。您有一些逻辑可以确定数据如何显示的详细信息。你无法逃避这一点。唯一的问题是这个逻辑应该去哪里(它不能消失,唉)。我认为把它放在视图中是最好的决定。

不过,我建议让控制器和视图之间的接口尽可能明确。将变量设置为 nil 比将其设置为“无数据”更清晰。您可能需要向模型添加更多变量,以便视图知道该做什么。这比拥有一个变量要好,该变量通常是一个数组,但有时包含一个告诉视图如何显示数据的字符串。

于 2012-08-22T12:30:35.743 回答
0

您可以使用礼物检查是否存在价值?在 MVC 中。

在您的控制器/视图中检查此情况。

if @first.present?
  do somthing
end
于 2012-08-22T10:58:25.857 回答
0

这似乎是Draper的工作

Draper 将 aView-Model插入到位于 Controller 和 View 之间的 MVC 组合中并装饰模型,以面向对象的方式处理所有自定义视图逻辑,同时将其与视图层和模型层分开。

Draper 上的 RailsCast为例。非常好(如果你认为它是合乎逻辑的)。

于 2012-08-22T12:54:04.660 回答