当我有多组数据时,我想完善我的控制器 - 视图交互

时间:2012-08-22 10:28:54

标签: ruby-on-rails model-view-controller design-patterns view controller

我觉得控制器 - >视图互动错过了什么,所以这是我的问题。

我有一个生成大量数据的控制器操作:

@First @第二 @third

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

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

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

除此之外,我还有一些用例,我的数据并不总是以相同的部分显示。我知道在调用正确的部分之前我可以用几个条件来做。

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

我已经在使这些用例工作了,但是感觉我没有通过在视图中放置很多逻辑来正确地进行MVC。是否有更好的设计模式,具体与否,以解决这种情况?

3 个答案:

答案 0 :(得分:0)

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

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

if @first.present?
  do somthing
end

答案 1 :(得分:0)

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

但是我建议尽可能明确地使Controller和View之间的接口。将变量设置为nil比将其设置为“无数据”更清晰。您可能需要向模型中添加更多变量,以便View知道该怎么做。这比例如一个通常是数组的变量,但有时会保存一个字符串,告诉View如何显示数据。

答案 2 :(得分:0)

这似乎是Draper

的工作

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

例如,查看RailsCast on Draper。非常好(如果你想到的话,也是合乎逻辑的)。